RaspberryPiのためにLinuxでディスクのイメージファイルを編集するのに使うけどすぐに忘れるのでメモ。
この記事でできること
- ディスクimageを一から作成できる
- 既存のディスクimgaeをマウントできる
1: 空のimageを作成
方法1 - truncate
truncate
コマンドでハードディスク上に指定したサイズ(単位はbyte)の空ファイルを作成する。
# サイズが2GiBのimageを作成 $ truncate -s 2GiB image.img
上で示した通り、サイズには接頭辞をつけることができる。よく使う単位は以下の通り。
- 1024B =
1K
または1KiB
(キビバイト) - 1024KB =
1M
または1MiB
(メビバイト) - 1024MB =
1G
または1GiB
(ギビバイト) - 1000B =
1KB
(キロバイト) - 1000KB =
1MB
(メガバイト) - 1000MB =
1GB
(ギガバイト)
WindowsやOSXで表示される単位は2進接頭辞(KiB、MiB、GiB)を基準にしているため、ここでは2進接頭辞を使う。なお、もう一方の単位系はSI接頭辞(KB、MB、GB)という。 *1
これを踏まえて実例を列挙する。
# 500byteのファイルを作成 $ truncate -s 500 image.img # 32MiBのファイルを作成 $ truncate -s 32MiB image.img # 1GiBのファイルを作成 $ truncate -s 1GiB image.img # 100MiBのファイルを3つ作成 $ truncate -s 100MiB image-1.img image-2.img image-3.img
方法2 - dd
dd
コマンドでも同様の空ファイルを作成することができる。
# サイズが2Gのimageを作成 $ dd of=image.img count=0 seek=1 bs=2G
2: ファイルをブロックデバイスとして認識させる
losetup
コマンドでループデバイスにファイルを関連付ける。ループデバイスに関連付けるにはroot権限が必要である。
# 使用されていないループデバイスを表示 $ sudo losetup -f /dev/loop0 # /dev/loop0にimage.imgを関連付ける $ sudo losetup /dev/loop0 image.img
逆に関連付けを解除するには-d
オプションを使う。
# /dev/loop0とimage.imgの関連付けを解除 $ sudo losetup -d /dev/loop0
3: パーティショニングする
設定したループデバイスに対してparted
でパーティショニングする。パーティショニングにはroot権限が必要である。
# 対話的にパーティショニングを開始する
$ sudo parted /dev/loop0
以下に2GiBのファイルを300MiBのfat32と1.7GiB(=残りの容量全部)のext4にパーティショニングする例を示す。
# 一行のコマンドでパーティショニングする $ sudo parted /dev/loop0 -s mklabel msdos \ -s mkpart primary fat32 0 300MiB \ -s mkpart primary ext4 300MiB 100% # パーティショニング内容を確認する $ sudo parted /dev/loop0 -s print
パーティショニングすると、パーティションに合わせてループデバイスに名前が割り振られる。上記の例では新たに/dev/loop0p1
(300MiB)と/dev/loop0p2
(1.7GiB)が作成される。
*2
4: フォーマットする
パーティショニングしたら指定のファイルシステムにフォーマットする。root権限が必要である。
# fat32でフォーマット $ sudo mkfs.vfat /dev/loop0p1 # ext4でフォーマット $ sudo mkfs.ext4 /dev/loop0p2
余計なことが大好きなOS(Ubuntuとか)ならばこの時点で勝手にマウントする。
5: マウントする
適当なディレクトリを作ってマウントする。root権限が必要である。
# ディレクトリ(マウントポイント)の作成 $ sudo mkdir /mnt/imgp1 /mnt/imgp2 # マウントする $ sudo mount /dev/loop0p1 /mnt/imgp1 $ sudo mount /dev/loop0p2 /mnt/imgp2
その他
この記事の通りにコマンドを打ちこんでいたらファイルだらけになったという人へ。以下のコマンドで掃除できる。
sudo umount /mnt/imgp1 sudo umount /mnt/imgp2 sudo rm -rf /mnt/imgp1 /mnt/imgp2 sudo losetup -d /dev/loop0 rm image.img