淘先锋技术网

首页 1 2 3 4 5 6 7


主要介绍了 如何创建分区的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 dd 命令

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
  1. 输入 m 获取帮助
  2. 输入n添加新分区
  3. 输入 p 或者默认表示创建主分区(假设为 BOOT 分区)
  4. 分区号(1)选择默认
  5. 起始扇区(第一个扇区)选择默认
  6. 终止扇区输入 +1G表示创建 1G 的分区供 BOOT 使用(有 +sectors 扇区 和 +size 大小 两种方式,这里是 + size)
  7. 输入 t 改变分区类型
  8. 选择分区 1
  9. 输入 L 查看所有分区类型码表
  10. 输入 b 表示转换为 fat32
  11. 输入 n 创建新分区(假设为 rootfs 分区)
  12. 重复3 4 5 6 到分区成功,可直接默认(4G只分两个区的话)
  13. 输入 a 标记引导分区
  14. 输入 1 将分区 1 标记为可引导(如有需要指定引导分区)
  15. 输入 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) 后生效。

大体步骤:

  1. n 创建新分区,选择分区类型,选择分区号,选择第一个扇区,选择分区大小
    在这里插入图片描述

  2. 输入 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

参考:

https://blog.csdn.net/EricTeo1024/article/details/113347930