文章目录
主要介绍了 如何创建分区的img镜像文件,如何挂载查看分区的img镜像文件
创建空白 img 文件
命令
dd if=/dev/zero of=test.img bs=4M count=1024
参数说明
if=文件名:输入文件名,默认为标准输入。即指定源文件。
of=文件名:输出文件名,默认为标准输出。即指定目的文件。
bs=bytes:同时设置读入/输出的块大小为bytes个字节。
count=blocks:仅拷贝blocks个块,块大小等于ibs(一次读入bytes个字节,)指定的字节数。
新建img大小为 bs*count;这里时 4096M = 4GiB(1024) = 4.3GB (1000)
/dev/zero:“零”设备,可以无限的提供空字符(0x00,ASCII代码NUL)。
更多学习
Linux中的虚拟设备/dev/null、/dev/zero、/dev/random和/dev/urandom
挂载空白 img 文件并分区
创建 loop 设备
loop设备是一种伪设备,是使用文件来模拟块设备的一种技术,文件模拟成块设备后, 就像一个磁盘或光盘一样使用。 参见 Linux中的loop设备
查看当前loop设备
sudo losetup -l
loop 设备已经到 17 了,所以将 img 文件和 loop18 设备建立联系
建立img和loop设备的联系
sudo losetup /dev/loop18 test.img
反查是否成功
sudo losetup -l
使用 fdisk 对loop设备分区
命令 开始分区
sudo fdisk /dev/loop6
- 输入 m 获取帮助
- 输入n添加新分区
- 输入 p 或者默认表示创建主分区(假设为 BOOT 分区)
- 分区号(1)选择默认
- 起始扇区(第一个扇区)选择默认
- 终止扇区输入
+1G
表示创建 1G 的分区供 BOOT 使用(有 +sectors 扇区 和 +size 大小 两种方式,这里是 + size) - 输入 t 改变分区类型
- 选择分区 1
- 输入 L 查看所有分区类型码表
- 输入 b 表示转换为 fat32
- 输入 n 创建新分区(假设为 rootfs 分区)
- 重复3 4 5 6 到分区成功,可直接默认(4G只分两个区的话)
- 输入 a 标记引导分区
- 输入 1 将分区 1 标记为可引导(如有需要指定引导分区)
- 输入 w 保存更改
详细输出如下:
leacock@leacock-virtual-machine:~/bin$ sudo fdisk /dev/loop18
欢迎使用 fdisk (util-linux 2.31.1)。
更改将停留在内存中,直到您决定将更改写入磁盘。
使用写入命令前请三思。
设备不包含可识别的分区表。
创建了一个磁盘标识符为 0xa79ef8a2 的新 DOS 磁盘标签。
命令(输入 m 获取帮助): m
帮助:
DOS (MBR)
a 开关 可启动 标志
b 编辑嵌套的 BSD 磁盘标签
c 开关 dos 兼容性标志
常规
d 删除分区
F 列出未分区的空闲区
l 列出已知分区类型
n 添加新分区
p 打印分区表
t 更改分区类型
v 检查分区表
i 打印某个分区的相关信息
杂项
m 打印此菜单
u 更改 显示/记录 单位
x 更多功能(仅限专业人员)
脚本
I 从 sfdisk 脚本文件加载磁盘布局
O 将磁盘布局转储为 sfdisk 脚本文件
保存并退出
w 将分区表写入磁盘并退出
q 退出而不保存更改
新建空磁盘标签
g 新建一份 GPT 分区表
G 新建一份空 GPT (IRIX) 分区表
o 新建一份的空 DOS 分区表
s 新建一份空 Sun 分区表
命令(输入 m 获取帮助): n
分区类型
p 主分区 (0个主分区,0个扩展分区,4空闲)
e 扩展分区 (逻辑分区容器)
选择 (默认 p): p
分区号 (1-4, 默认 1):
第一个扇区 (2048-8388607, 默认 2048):
上个扇区,+sectors 或 +size{K,M,G,T,P} (2048-8388607, 默认 8388607): +1G
创建了一个新分区 1,类型为“Linux”,大小为 1 GiB。
命令(输入 m 获取帮助): t
已选择分区 1
Hex 代码(输入 L 列出所有代码): L
0 空 24 NEC DOS 81 Minix / 旧 Linu bf Solaris
1 FAT12 27 隐藏的 NTFS Win 82 Linux swap / So c1 DRDOS/sec (FAT-
2 XENIX root 39 Plan 9 83 Linux c4 DRDOS/sec (FAT-
3 XENIX usr 3c PartitionMagic 84 OS/2 隐藏 或 In c6 DRDOS/sec (FAT-
4 FAT16 <32M 40 Venix 80286 85 Linux 扩展 c7 Syrinx
5 扩展 41 PPC PReP Boot 86 NTFS 卷集 da 非文件系统数据
6 FAT16 42 SFS 87 NTFS 卷集 db CP/M / CTOS / .
7 HPFS/NTFS/exFAT 4d QNX4.x 88 Linux 纯文本 de Dell 工具
8 AIX 4e QNX4.x 第2部分 8e Linux LVM df BootIt
9 AIX 可启动 4f QNX4.x 第3部分 93 Amoeba e1 DOS 访问
a OS/2 启动管理器 50 OnTrack DM 94 Amoeba BBT e3 DOS R/O
b W95 FAT32 51 OnTrack DM6 Aux 9f BSD/OS e4 SpeedStor
c W95 FAT32 (LBA) 52 CP/M a0 IBM Thinkpad 休 ea Rufus 对齐
e W95 FAT16 (LBA) 53 OnTrack DM6 Aux a5 FreeBSD eb BeOS fs
f W95 扩展 (LBA) 54 OnTrackDM6 a6 OpenBSD ee GPT
10 OPUS 55 EZ-Drive a7 NeXTSTEP ef EFI (FAT-12/16/
11 隐藏的 FAT12 56 Golden Bow a8 Darwin UFS f0 Linux/PA-RISC
12 Compaq 诊断 5c Priam Edisk a9 NetBSD f1 SpeedStor
14 隐藏的 FAT16 <3 61 SpeedStor ab Darwin 启动 f4 SpeedStor
16 隐藏的 FAT16 63 GNU HURD 或 Sys af HFS / HFS+ f2 DOS 次要
17 隐藏的 HPFS/NTF 64 Novell Netware b7 BSDI fs fb VMware VMFS
18 AST 智能睡眠 65 Novell Netware b8 BSDI swap fc VMware VMKCORE
1b 隐藏的 W95 FAT3 70 DiskSecure 多启 bb Boot Wizard 隐 fd Linux raid 自动
1c 隐藏的 W95 FAT3 75 PC/IX bc Acronis FAT32 L fe LANstep
1e 隐藏的 W95 FAT1 80 旧 Minix be Solaris 启动 ff BBT
Hex 代码(输入 L 列出所有代码): b
已将分区“Linux”的类型更改为“W95 FAT32”。
命令(输入 m 获取帮助): n
分区类型
p 主分区 (1个主分区,0个扩展分区,3空闲)
e 扩展分区 (逻辑分区容器)
选择 (默认 p):
将使用默认回应 p。
分区号 (2-4, 默认 2):
第一个扇区 (2099200-8388607, 默认 2099200):
上个扇区,+sectors 或 +size{K,M,G,T,P} (2099200-8388607, 默认 8388607):
创建了一个新分区 2,类型为“Linux”,大小为 3 GiB。
命令(输入 m 获取帮助): a
分区号 (1,2, 默认 2): 1
分区 1 的 可启动 标志已启用。
命令(输入 m 获取帮助): w
分区表已调整。
将调用 ioctl() 来重新读分区表。
重新读取分区表失败。: 无效的参数
内核仍在使用旧分区表。新分区表将在下次重启或运行 partprobe(8) 或 kpartx(8) 后生效。
大体步骤:
-
n 创建新分区,选择分区类型,选择分区号,选择第一个扇区,选择分区大小
-
输入 t 进行改变分区类型操作,输入 a 进行标记引导分区操作
断开img和loop的联系
sudo losetup -d /dev/loop18
sudo losetup -l
挂载分区后的img文件
查看 img 文件情况
fdisk -l test.img
可知一共有两个区,以及各区相关信息。由于一共有两个区后面需要和两个loop设置建立联系。
注意记录下: 扇区大小 512 字节 ,各分区起止扇区编号 test.img1 (2048,2099199) 和 test.img2(2099200,8388607)
将分区和 loop设备建立联系
这里需要进行一点计算
# -o (起始扇区 * 扇区大小)--sizelimit (扇区数量 * 扇区大小) 字节
sudo losetup -f -o 1048576 --sizelimit 1073741824 test.img
sudo losetup -f -o 1074790400 --sizelimit 3220176896 test.img
1048576 = 2048 * 512 ; 1073741824 = 2097152 * 512 或 (2099199 - 2048 + 1)* 512 (注意: +1)
查看是否成功 sudo losetup -l
格式化分区(如有必要)
sudo mkfs.fat /dev/loop18
sudo mkfs.ext4 /dev/loop19
挂载分区
# 建立挂载点
mkdir rootfs boot
# 挂载
sudo mount /dev/loop18 boot/
sudo mount /dev/loop19 rootfs/
查看挂载情况 df -h
然后就可以拷贝文件到所需img分区中了
拷贝完成清理工作
卸载分区
sudo umount rootfs boot
断开img和loop的联系
sudo losetup -d /dev/loop18 /dev/loop19