Linux创建虚拟磁盘文件(单文件多分区)
创建这东西有什么用呢?有!玩过树莓派、香橙派等各种派的同志们都知道,从网上下载到一个系统镜像文件,烧写到TF卡之后linux分区工具,TF卡就变成俩分区的了,我不知道人家是不是像我这样做的镜像,但是,用这个方法做成了Orangepi Zero的系统镜像。 还有一个用途:把一些不想让别人看到的东西,塞到这个镜像文件里,不知道文件格式的人根本不知道怎么打开(好吧,这个功能确实很牵强)。 制作步骤与方法(Ubuntu环境,缺命令的自己安装一下): Step1:制作一个空白文件,也就相当于买一块硬盘,文件名叫做VirtualDisk.img,总大小为32MB(自己根据需要修改大小),这个dd命令的具体用法请自行搜索。 # dd if=/dev/zero of=VirtualDisk.img bs=1M count=32 Step2:为空白文件创建分区,我这里创建两个分区,第一个分区4MB,文件系统为FAT,剩下的空间作为第二个分区,文件系统为EXT4,使用fdisk命令进行分区,fdisk的使用方法请自行搜索,这里为了简便,我就把手动操作fdisk的命令全部打到一行了: # echo 'n\np\n1\n2048\n18432\nt\nb\nn\np\n2\n18433\n\nw\n' |fdisk VirtualDisk.img > /dev/null 上面一行命令我觉得不解释一下可能会挨揍,具体是这样的: echo后面的一堆东西,是按照操作fdisk命令的输入顺序码出来的,所有的\n都代表回车,也就是说,上面的命令相当于这样做: 先执行 fdisk VirtualDisk.img,然后依次输入:n (新建分区)、回车、p(主分区)、回车、1(第一个分区)、回车、2048(从2048处开始)、回车……(自己解析吧) Step3:把镜像文件映射(暂且叫映射吧,你看完后面内容慢慢理解这步操作的意思)到系统中: # kpartx -av VirtualDisk.img 执行这条命令之后,在系统的/dev/mapper/目录中会生成两个文件:loop0p1和loop0p2 Step4:格式化这两个分区(一个FAT、一个EXT4) # mkfs.vfat /dev/mapper/loop0p1 # mkfs.ext4 /dev/mapper/loop0p2 Step5:设置卷标,这一步可以省略,不设置的话,刷完镜像的磁盘插到电脑上会显示“可移动磁盘”或者其他系统默认的卷标 # dosfslabel /dev/mapper/loop0p1 "BOOT" # e2label /dev/mapper/loop0p2 "Linux" FAT分区用dosfslabel命令,EXT分区用e2label命令。上面的BOOT和Linux字符串是卷标,随意设置。到此,虚拟磁盘文件已经建立完成了,下面是如何挂载、使用的方法。 Step6:创建挂载点并挂载分区 # mkdir -p /mnt/BOOT # mkdir -p /mnt/Linux # mount -o loop -t vfat /dev/mapper/loop0p1 /mnt/BOOT # mount -o loop -t ext4 /dev/mapper/loop0p2 /mnt/Linux 挂载成功后,就可以在/mnt/BOOT和/mnt/Linux两个文件夹中搞一些事情了 Step7:卸载分区(加-l是无条件卸载,防止卸不掉,是小写的L,不是数字1) # umount -l /mnt/BOOT # umount -l /mnt/Linux Step8:取消虚拟磁盘文件在系统中的映射 # kpartx -d VirtualDisk.img 好了,搞定了,下面是我做的一个shell脚本,用来打包Orangepi Zero系统镜像的,需要的拿去修改一下再用(不要嘲笑我的注释,那是Chglish)。 #! /bin/sh IMG_NAME="OrangePiZero.img" # Create a new disk image: 32MB dd if=/dev/zero of=$IMG_NAME bs=1M count=32 # Partition the image, part1: 4MB@FAT32, part2:@EXT4 echo 'n\np\n1\n2048\n18432\nt\nb\nn\np\n2\n18433\n\nw\n' |fdisk $IMG_NAME > /dev/null # Just have a look fdisk -l $IMG_NAME |tail -n 3 # Mapping the image to host system sudo kpartx -av $IMG_NAME [ $? -ne 0 ] && echo "Please use right root password." && exit 1 sleep 0.1s # Don't remove this!!! # Format the partion: part1@FAT32 sudo mkfs.vfat /dev/mapper/loop0p1 # Format the partion: part2@EXT4 sudo mkfs.ext4 /dev/mapper/loop0p2 sleep 0.1s # Don't remove this!!! # Change the label of partion: part1@BOOT sudo dosfslabel /dev/mapper/loop0p1 "BOOT" -End- (编辑:成都站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |