![如何创建和分区原始磁盘映像?](https://linux22.com/image/1342613/%E5%A6%82%E4%BD%95%E5%88%9B%E5%BB%BA%E5%92%8C%E5%88%86%E5%8C%BA%E5%8E%9F%E5%A7%8B%E7%A3%81%E7%9B%98%E6%98%A0%E5%83%8F%EF%BC%9F.png)
我需要创建一个原始磁盘映像以用于虚拟机,但我需要在创建文件系统或安装操作系统之前创建分区。
有人能描述一下这个过程吗?
答案1
首先创建一个空白的原始磁盘映像(本例中为 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
答案2
全自动流程
创建my.img
具有单个 ext4 分区的映像:
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"
在 Ubuntu 14.04 上测试。
“困难”的部分是:
使用多个循环分区设备挂载镜像文件。这里我们使用了
kpartx
,但还有其他方法:如何在 Linux 下从 dd 创建的块设备(例如 HDD)映像挂载分区?以非交互方式创建分区。这里我们只需
fdisk
按照以下方式进行管道传输:使用 bash 脚本创建和格式化分区