仮想マシンで使用するrawディスクイメージを作成する必要がありますが、ファイルシステムを作成したり、オペレーティングシステムをインストールしたりする前に、パーティションを作成する必要があります。
誰かがこれを行うためのプロセスを説明できますか?
まず、空のrawディスクイメージ(この場合は25GB)を作成します。
# dd if=/dev/zero of=disk.img bs=1024k seek=25600 count=0
0+0 records in
0+0 records out
0 bytes (0 B) copied, 2.7301e-05 s, 0.0 kB/s
# ls -lh
total 2.0G
-rw-r--r-- 1 root root 25G Dec 13 11:13 disk.img
パーティションテーブルを指定します。
# parted disk.img mklabel msdos
ループバックデバイスとしてマウントします(シリンダー、ヘッド、セクターを定義する最も簡単な方法):
# losetup -f disk.img
# losetup -a
/dev/loop0: [0801]:12059103 (/path/to/disk.img)
有効なブロックデバイスのように見えることを確認します。
# fdisk /dev/loop0
WARNING: DOS-compatible mode is deprecated. It's strongly recommended to
switch off the mode (command 'c') and change display units to
sectors (command 'u').
Command (m for help): p
Disk /dev/loop0: 26.8 GB, 26843545600 bytes
255 heads, 63 sectors/track, 3263 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x000db005
Device Boot Start End Blocks Id System
次に、fdisk
を使用して、必要に応じてパーティションを作成します。
# fdisk /dev/loop0
完了したら、デバイスのループを解除する必要があります(最初にマッピングとマウント解除が必要になります)。
# losetup -d /dev/loop0
完全に自動化された手順
単一のext4パーティションでmy.img
イメージを作成します。
Sudo apt-get install kpartx
img='my.img'
dd if=/dev/zero of="$img" bs=512 count=131072
printf 'o\nn\np\n1\n\n\nw\n' | fdisk "$img"
Sudo kpartx -av "$img"
Sudo mke2fs -t ext4 /dev/mapper/loop0p1
mkdir d
Sudo mount /dev/mapper/loop0p1 d
# Do something to the ext partition.
Sudo touch a
Sudo umount d
Sudo kpartx -dv "$img"
Ubuntu14.04でテスト済み。
「難しい」部分は次のとおりです。
複数のループパーティションデバイスを使用してイメージファイルをマウントします。ここではkpartx
を使用しましたが、他の方法もあります: Linuxでddが作成したブロックデバイス(HDDなど)のイメージからパーティションをマウントするにはどうすればよいですか?
非対話的にパーティションを作成します。ここでは、次のようにfdisk
にパイプしました: bashスクリプトを使用したパーティションの作成とフォーマット