linux一切都是文件的特性可以使你把一个文件当成虚拟磁盘来用。步骤如下:
1. 使用dd创建虚拟磁盘文件。例如,使用下面可以创建一个200M的磁盘
dd if =/dev/zero of=~/HDD.img bs=1M count= 200 |
2. 使用fdisk对其进行分区
[lujun9972 @X61 ~]$ fdisk HDD.img 欢迎使用 fdisk (util-linux 2.32 )。 更改将停留在内存中,直到您决定将更改写入磁盘。 使用写入命令前请三思。 设备不包含可识别的分区表。 创建了一个磁盘标识符为 0x38ffa4dc 的新 DOS 磁盘标签。 命令(输入 m 获取帮助):n 分区类型 p 主分区 ( 0 个主分区, 0 个扩展分区, 4 空闲) e 扩展分区 (逻辑分区容器) 选择 (默认 p):p 分区号 ( 1 - 4 , 默认 1 ): 第一个扇区 ( 2048 - 409599 , 默认 2048 ): 上个扇区,+sectors 或 +size{K,M,G,T,P} ( 2048 - 409599 , 默认 409599 ): +100M 创建了一个新分区 1 ,类型为“Linux”,大小为 100 MiB。 命令(输入 m 获取帮助):n 分区类型 p 主分区 ( 1 个主分区, 0 个扩展分区, 3 空闲) e 扩展分区 (逻辑分区容器) 选择 (默认 p):p 分区号 ( 2 - 4 , 默认 2 ): 第一个扇区 ( 206848 - 409599 , 默认 206848 ): 上个扇区,+sectors 或 +size{K,M,G,T,P} ( 206848 - 409599 , 默认 409599 ): 创建了一个新分区 2 ,类型为“Linux”,大小为 99 MiB。 命令(输入 m 获取帮助):w 分区表已调整。 正在同步磁盘。 |
3. 使用losetup创建loop设备
[lujun9972 @X61 ~]$ sudo losetup -Pf --show ~/HDD.img [sudo] lujun9972 的密码: /dev/loop0 |
其中参数
-P
强制要求核心扫描loop设备中的分区表
-f
自动寻找并使用第一个未用的loop设备
–show
输出所分配的loop设备
使用 lsblk
可以看到已经把虚拟磁盘文件挂载上去了
[lujun9972 @X61 ~]$ lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT loop0 7 : 0 0 200M 0 loop ├─loop0p1 259 : 2 0 100M 0 loop └─loop0p2 259 : 3 0 99M 0 loop sda 8 : 0 0 111 .8G 0 disk ├─sda1 8 : 1 0 50G 0 part /home ├─sda2 8 : 2 0 8G 0 part [SWAP] └─sda3 8 : 3 0 53 .8G 0 part / |
4. 像普通磁盘那样使用
虚拟磁盘用起来跟普通磁盘一样:
可以创建文件系统
[lujun9972 @X61 ~]$ sudo mkfs.reiserfs /dev/loop0p1 mkfs.reiserfs 3.6 . 27 Guessing about desired format.. Kernel 4.15 . 15 - 1 -ARCH is running. Format 3.6 with standard journal Count of blocks on the device: 25600 Number of blocks consumed by mkreiserfs formatting process: 8212 Blocksize: 4096 Hash function used to sort names: "r5" Journal Size 8193 blocks (first block 18 ) Journal Max transaction length 1024 inode generation number: 0 UUID: 6cad1bcb- 4798 - 4643 -b471-a5ab695e0eb5 ATTENTION: YOU SHOULD REBOOT AFTER FDISK! ALL DATA WILL BE LOST ON '/dev/loop0p1' ! Continue (y/n):y Initializing journal - 0 %.... 20 %.... 40 %.... 60 %.... 80 %.... 100 % Syncing..ok ReiserFS is successfully created on /dev/loop0p1. |
可以挂载
[lujun9972 @X61 ~]$ sudo mount /dev/loop0p1 /mnt [lujun9972 @X61 ~]$ df -h 文件系统 容量 已用 可用 已用% 挂载点 dev 1 .9G 0 1 .9G 0 % /dev run 1 .9G 720K 1 .9G 1 % /run /dev/sda3 53G 7 .3G 43G 15 % / tmpfs 1 .9G 23M 1 .9G 2 % /dev/shm tmpfs 1 .9G 0 1 .9G 0 % /sys/fs/cgroup tmpfs 1 .9G 52K 1 .9G 1 % /tmp /dev/sda1 50G 25G 26G 49 % /home tmpfs 388M 4 .0K 388M 1 % /run/user/ 1000 /dev/loop0p1 100M 33M 68M 33 % /mnt |
存入文件
[lujun9972 @X61 ~]$ sudo touch /mnt/secret [lujun9972 @X61 ~]$ ls -l /mnt/secret -rw-r--r-- 1 root root 0 4 月 9 18 : 36 /mnt/secret |
5. 使用完后,再使用losetup卸载虚拟磁盘
[lujun9972 @X61 ~]$ sudo umount /mnt [lujun9972 @X61 ~]$ sudo losetup -d /dev/loop0 [lujun9972 @X61 ~]$ lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda 8 : 0 0 111 .8G 0 disk ├─sda1 8 : 1 0 50G 0 part /home ├─sda2 8 : 2 0 8G 0 part [SWAP] └─sda3 8 : 3 0 53 .8G 0 part / |