
有的时候需要做些磁盘相关的实验,又不好真的去改磁盘分区,这时候我们可以把一个文件挂载成磁盘或路径。
制作一个特定大小的文件
dd if=/dev/zero of=drive.img bs=1M count=1注:bs指定一次读写的块大小,count指定读写次数,两者相乘就是文件大小
把文件挂载到路径
mkfs.exe4 drive.img # 必须提前格式化文件系统
mkdir drive_file
mount -o loop drive.img drive_file/
df # 查看挂载点
umount drive_file # 解除挂载往路径drive_file写入文件就是写入drive.img了
底层挂到了loop设备:
# losetup
NAME SIZELIMIT OFFSET AUTOCLEAR RO BACK-FILE DIO LOG-SEC
/dev/loop0 0 0 1 0 /tmp/mountoverlay/drive.img 0 512
# losetup -a
/dev/loop0: [51713]:2775790 (/tmp/mountoverlay/drive.img)把文件挂载成磁盘
losetup /dev/loop1 drive.img这会把文件挂载成 /dev/loop1 设备,注意要挂载到空闲设备,可以用 losetup -a 查看,可以用不存在的 loop 设备,比如 /dev/loop99, loop 后必须是数字,挂载后会自动创建对应的设备。
然后可以用 fdisk 对设备进行分区操作:
fdisk /dev/loop99
Command (m for help): g
Created a new GPT disklabel (GUID: 90272D0E-DB24-1B40-BBF0-3A1ABD91788E).
Command (m for help): n
Partition number (1-128, default 1):
First sector (34-2014, default 34):
Last sector, +sectors or +size{K,M,G,T,P} (34-2014, default 2014):
Created a new partition 1 of type 'Linux filesystem' and of size 990.5 KiB.
Command (m for help): w
The partition table has been altered.
Calling ioctl() to re-read partition table.
Re-reading the partition table failed.: Invalid argument
The kernel still uses the old table. The new table will be used at the next reboot or after you run partprobe(8) or kpartx(8).
注意命令提示的最后一句话,新分区需要更新下内核分区表才能看到:
partprobe /dev/loop99
# ls /dev/loop99*
/dev/loop99 /dev/loop99p1/dev/loop99p1 就是刚创建的分区,我们可以对其格式化文件系统,然后挂载到某个路径使用。