加入收藏 | 设为首页 | 会员中心 | 我要投稿 成都站长网 (https://www.028zz.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 服务器 > 搭建环境 > Linux > 正文

Linux创建虚拟磁盘文件(单文件多分区)

发布时间:2022-09-30 16:30:29 所属栏目:Linux 来源:互联网
导读: 创建这东西有什么用呢?有!玩过树莓派、香橙派等各种派的同志们都知道,从网上下载到一个系统镜像文件,烧写到TF卡之后linux分区工具,TF卡就变成俩分区的了,我不知道人家是不是像我这样

创建这东西有什么用呢?有!玩过树莓派、香橙派等各种派的同志们都知道,从网上下载到一个系统镜像文件,烧写到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"

linux分区工具_win10自带分区工具给固态分区_linux 图形分区工具

# Change the label of partion: part2@Linux sudo e2label /dev/mapper/loop0p2 "Linux" # Create mountpoints sudo mkdir -p /mnt/BOOT sudo mkdir -p /mnt/Linux # Mount partions sudo mount -o loop -t vfat /dev/mapper/loop0p1 /mnt/BOOT sudo mount -o loop -t ext4 /dev/mapper/loop0p2 /mnt/Linux # Copy files to image partions sudo cp -v zImage sun8i-h2-plus-orangepi-zero.dtb /mnt/BOOT sudo cp -v -r rootfs/* /mnt/Linux/ sync # Unmount partions sudo umount -l /mnt/BOOT sudo umount -l /mnt/Linux # Delete mountpoints sudo rm -rf /mnt/BOOT sudo rm -rf /mnt/Linux # Install u-boot to image sudo dd if=u-boot-sunxi-with-spl.bin of=/dev/loop0 bs=1024 seek=8 # Unmap the image from host system sudo kpartx -d $IMG_NAME [ $? -ne 0 ] && echo "Please use right root password." && exit 1

-End-

(编辑:成都站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!