本文主要描述重装操作系统如何格式化跟分区和数据盘以及设置磁盘挂载配置。
1.将操作系统写入根分区设备
1、解绑根分区磁盘目录挂载
1 2 3 4 5 6 7 8
| cat /proc/mounts | grep ^/dev/sda /dev/sda4 / ext4 rw,relatime,errors=remount-ro 0 0 /dev/sda3 /boot ext4 rw,relatime 0 0 /dev/sda2 /boot/efi vfat rw,relatime,fmask=0077,dmask=0077,codepage=437,iocharset=iso8859-1,shortname=mixed,errors=remount-ro 0 0
cat /proc/mounts | grep ^/dev/sda | awk '{print $2}' | xargs -n1 -i umount {}
|
2、删除块设备分区
1
| sfdisk --delete /dev/sda
|
3、将操作系统镜像写入根分区设备
1
| qemu-img dd -f qcow2 -O raw bs=16M if=osi.qcow2 of=/dev/sda
|
命令参数说明:
-
-f qcow2
- 指定输入文件的格式为
qcow2
(QEMU Copy-On-Write v2)。
osi.qcow2
是一个虚拟磁盘文件,包含系统或数据。
-
-O raw
- 指定输出格式为
raw
,即不包含额外元数据的裸数据格式。
- 裸数据格式适用于直接写入物理磁盘设备。
-
bs=16M
- 设置块大小为 16 MB,在数据复制过程中以 16 MB 为单位进行读写。
- 较大的块大小通常能提高写入效率,特别是对大容量文件。
-
if=osi.qcow2
- 输入文件路径,
osi.qcow2
是源虚拟磁盘镜像文件。
-
of=/dev/sda
- 输出文件路径,
/dev/sda
是目标物理磁盘设备。
- 数据将直接写入
/dev/sda
,覆盖其内容。
4、检查并修复根分区
- 如果分区表无问题,
parted
会直接显示分区信息。
- 如果检测到分区表错误,
parted
会自动应用修复并输出结果。
1
| echo Fix | parted ---pretend-input-tty /dev/sda print
|
5、 通知内核重新读取分区表
2. 根分区设备重新分区
跟设备的分区主要包括三个分区
2.1. 配置swap分区
swap分区一般从根分区设备大小中切分出来128G作为swap的分区,剩余的做根分区和data分区。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| root_device="sda" swap_device_num=1
swap_size=131072
echo Ignore | parted ---pretend-input-tty /dev/${root_device} rm ${swap_device_num}
free_end=$(parted /dev/${root_device} unit MiB print free | grep 'Free Space'|tail -1 | awk '{print $1}' | sed 's/MiB//')
swap_start=${free_end} swap_end=$((swap_start + ${swap_size})) echo Ignore | parted ---pretend-input-tty /dev/${root_device} -- mkpart primary ${swap_start}MiB ${swap_end}MiB
mkswap /dev/${root_device}${swap_device_num}
|
2.2. 格式化根分区
2.2.1. 未指定根分区大小
如果没有指定根分区大小,一般不需要再做一个data分区,而是把根分区扩展为剩余的所有空间。
1、如果根分区目录没有指定分区大小,且没有做swap分区。则重新调整大小,扩展到设备的所有剩余空间。
1 2 3 4
| root_device="sda" root_device_num=1
echo Yes | parted ---pretend-input-tty /dev/${root_device} -- resizepart ${root_device_num} 100%
|
2、如果根分区没有指定分区大小,但是有做swap分区。
1 2 3 4 5 6
| root_device="sda"
root_start=$(parted /dev/${root_device} unit MiB print free | grep 'Free Space'|tail -1 | awk '{print $1}' | sed 's/MiB//')
echo Ignore | parted ---pretend-input-tty /dev/${root_device} -- mkpart primary ${root_start}MiB 100%
|
2.2.2. 指定根分区大小
如果指定了根分区大小,一般需要再创建一个data分区,将data分区扩展为剩余的所有的空间。
1、如果根分区目录有指定大小,且没有做swap分区。则按指定大小分区,例如将跟分区大小设置300G
1 2 3 4 5 6 7 8 9
| root_device="sda" root_device_num=1 root_size=307200
root_start=$(parted /dev/${root_device} unit MiB print | awk '/./{end=$2} END{print end}' | sed 's/MiB//') root_end=$((1+ root_start + ${root_size}))
echo Yes | parted ---pretend-input-tty /dev/${root_device} -- resizepart ${root_device_num} ${root_end}
|
2、如果根分区有指定大小,但是有做swap分区。
1 2 3 4 5 6 7 8 9
| root_device="sda" root_device_num=1 root_size=307200
root_start=$(parted /dev/${root_device} unit MiB print free | grep 'Free Space'|tail -1 | awk '{print $1}' | sed 's/MiB//') root_end=$((1+ root_start + ${root_size}))
echo Ignore | parted ---pretend-input-tty /dev/${root_device} -- mkpart primary ${root_start}MiB ${root_end}MiB
|
2.3. 创建跟设备的data分区
如果有指定需要创建跟设备的data分区,则在创建完swap分区和根分区后,继续创建data分区。
1、创建跟设备的data分区
1 2 3 4 5 6
| root_device="sda"
data_start=$(parted /dev/${root_device} unit MiB print free | grep 'Free Space'|tail -1 | awk '{print $1}' | sed 's/MiB//')
echo Ignore | parted ---pretend-input-tty /dev/${root_device} -- mkpart primary ${data_start}MiB 100%
|
2、格式化根data分区的文件系统
1 2 3 4 5 6 7
| device="/dev/sda2"
mkfs.xfs -f -n ftype=1 ${device}
mkfs.ext4 -F ${device}
|
2. 格式化数据盘
1、找出数据盘所对应的块设备,例如:/dev/sdb
1 2 3 4 5 6 7
| lsblk -J -d { "blockdevices": [ {"name":"sda", "maj:min":"8:0", "rm":false, "size":"1.1T", "ro":false, "type":"disk", "mountpoint":null}, {"name":"sdb", "maj:min":"8:16", "rm":false, "size":"6.1T", "ro":false, "type":"disk", "mountpoint":"/data"} ] }
|
2、删除块设备分区并重建分区
1 2 3 4
| sfdisk --delete /dev/sdb
echo label:gpt | sfdisk /dev/sdb
|
3、 通知内核重新读取分区表
4、格式化数据盘的文件系统
1 2 3 4 5
| mkfs.xfs -f -n ftype=1 /dev/sdb
mkfs.ext4 -F /dev/sdb
|
3. 设置fstab磁盘挂载
设置swap分区磁盘挂载
1 2
| swap_uuid=$(lsblk -f |grep swap|awk '{print $3}') echo "UUID=${swap_uuid} swap swap defaults 0 0" >> /etc/fstab
|
设置根分区磁盘挂载
todo