跳到主要内容

磁盘管理

查看所有物理磁盘

➜  ~ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
fd0 2:0 1 4K 0 disk
loop0 7:0 0 63.3M 1 loop /snap/core20/1828
loop1 7:1 0 91.8M 1 loop /snap/lxd/24061
loop2 7:2 0 49.8M 1 loop /snap/snapd/18357
sda 8:0 0 32G 0 disk
├─sda1 8:1 0 16M 0 part
└─sda2 8:2 0 32G 0 part
sdb 8:16 0 30G 0 disk
├─sdb1 8:17 0 1M 0 part
└─sdb2 8:18 0 30G 0 part
├─vg0-lv--0 253:0 0 2G 0 lvm /boot
└─vg0-lv--1 253:1 0 28G 0 lvm /
sr0 11:0 1 1024M 0 rom

查看所有磁盘的文件系统及 UUID

➜  ~ lsblk -f
NAME FSTYPE FSVER LABEL UUID FSAVAIL FSUSE% MOUNTPOINTS
fd0
loop0 squashfs 4.0 0 100% /snap/core20/1828
loop1 squashfs 4.0 0 100% /snap/lxd/24061
loop2 squashfs 4.0 0 100% /snap/snapd/18357
sda
└─sda1 ext4 1.0 43804dea-47a3-4eb8-b430-b1c41fd929ae
sdb
├─sdb1
└─sdb2 LVM2_member LVM2 001 8GSCyl-dfmU-prfS-daGu-hO10-fJRU-RTwBpW
├─vg0-lv--0 ext4 1.0 fd85d8e8-01e5-4af7-83bf-3eaa973af5bd 1.6G 11% /boot
└─vg0-lv--1 ext4 1.0 f9ca32f4-ab85-4aa9-98e3-3218551e8d23 17.5G 31% /
sr0

查看当前所有硬盘分区表

➜  ~ sudo fdisk -l
Disk /dev/loop0:63.29 MiB,66359296 字节,129608 个扇区
单元:扇区 / 1 * 512 = 512 字节
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节


Disk /dev/loop1:91.83 MiB,96292864 字节,188072 个扇区
单元:扇区 / 1 * 512 = 512 字节
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节


Disk /dev/loop2:49.84 MiB,52260864 字节,102072 个扇区
单元:扇区 / 1 * 512 = 512 字节
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节


Disk /dev/sda:32 GiB,34359738368 字节,67108864 个扇区
Disk model: Virtual Disk
单元:扇区 / 1 * 512 = 512 字节
扇区大小(逻辑/物理):512 字节 / 4096 字节
I/O 大小(最小/最佳):4096 字节 / 4096 字节
磁盘标签类型:gpt
磁盘标识符:1BCBE543-1E51-45A7-BAF0-1222A2819168

设备 起点 末尾 扇区 大小 类型
/dev/sda1 34 32767 32734 16M Microsoft 保留
/dev/sda2 32768 67104767 67072000 32G Microsoft 基本数据

分区 1 未起始于物理扇区边界。


Disk /dev/sdb:30 GiB,32212254720 字节,62914560 个扇区
Disk model: Virtual Disk
单元:扇区 / 1 * 512 = 512 字节
扇区大小(逻辑/物理):512 字节 / 4096 字节
I/O 大小(最小/最佳):4096 字节 / 4096 字节
磁盘标签类型:gpt
磁盘标识符:213802C3-A80B-43FD-B372-8726B3799841

设备 起点 末尾 扇区 大小 类型
/dev/sdb1 2048 4095 2048 1M BIOS 启动
/dev/sdb2 4096 62912511 62908416 30G Linux 文件系统


Disk /dev/mapper/vg0-lv--0:2 GiB,2147483648 字节,4194304 个扇区
单元:扇区 / 1 * 512 = 512 字节
扇区大小(逻辑/物理):512 字节 / 4096 字节
I/O 大小(最小/最佳):4096 字节 / 4096 字节


Disk /dev/mapper/vg0-lv--1:28 GiB,30060576768 字节,58712064 个扇区
单元:扇区 / 1 * 512 = 512 字节
扇区大小(逻辑/物理):512 字节 / 4096 字节
I/O 大小(最小/最佳):4096 字节 / 4096 字节

查看磁盘可用空间

➜  ~ df -h
文件系统 大小 已用 可用 已用% 挂载点
tmpfs 1.6G 1.2M 1.6G 1% /run
/dev/mapper/vg0-lv--1 28G 9.4G 17G 36% /
tmpfs 7.9G 0 7.9G 0% /dev/shm
tmpfs 5.0M 0 5.0M 0% /run/lock
/dev/mapper/vg0-lv--0 2.0G 224M 1.6G 13% /boot
tmpfs 1.6G 4.0K 1.6G 1% /run/user/1000

使用 gdisk 修改分区表

选择要操作的硬盘

➜  ~ sudo gdisk /dev/sda
GPT fdisk (gdisk) version 1.0.8

The protective MBR's 0xEE partition is oversized! Auto-repairing.

Partition table scan:
MBR: protective
BSD: not present
APM: not present
GPT: present

Found valid GPT with protective MBR; using GPT.

帮助信息

Command (? for help): ?
b 将GPT数据备份到一个文件
c 更改分区名称
d 删除一个分区
i 显示分区详细信息
l 列出已知分区类型。此处 8200 是Linux swap,8300 是 Linux filesystem(对应 fdisk 的 82 和 83)。还有一个 8e00 是 Linux LVM
n 增加一个新的分区
o 创建一个新的空白的GPT分区表
p 显示当前磁盘的分区表
q 退出gdisk程序,不保存任何修改
r 恢复和转换选项(仅限专家)
s 排序分区
t 改变分区的类型
v 验证磁盘分区表
w 将分区表写入裁判并退出(保存并退出)
x 额外功能(仅限专家)
? 显示帮助信息

查看当前硬盘上的分区表

Command (? for help): p
Disk /dev/sda: 67108864 sectors, 32.0 GiB
Model: Virtual Disk
Sector size (logical/physical): 512/4096 bytes
Disk identifier (GUID): 1BCBE543-1E51-45A7-BAF0-1222A2819168
Partition table holds up to 128 entries
Main partition table begins at sector 2 and ends at sector 33
First usable sector is 34, last usable sector is 67108830
Partitions will be aligned on 2-sector boundaries
Total free space is 4063 sectors (2.0 MiB)

Number Start (sector) End (sector) Size Code Name
1 34 32767 16.0 MiB 0C01 Microsoft reserved ...
2 32768 67104767 32.0 GiB 0700 Basic data partition

新建 GPT 分区表

Command (? for help): o
This option deletes all partitions and creates a new protective MBR.
Proceed? (Y/N): y

创建新分区

Command (? for help): n
Partition number (1-128, default 1):
First sector (34-67108830, default = 2048) or {+-}size{KMGTP}:
Last sector (2048-67108830, default = 67108830) or {+-}size{KMGTP}:
Current type is 8300 (Linux filesystem)
Hex code or GUID (L to show codes, Enter = 8300):
Changed type of partition to 'Linux filesystem'

将更改写入磁盘

数据无价!谨慎操作!

Command (? for help): w

Final checks complete. About to write GPT data. THIS WILL OVERWRITE EXISTING
PARTITIONS!!

Do you want to proceed? (Y/N): y
OK; writing new GUID partition table (GPT) to /dev/sda.
The operation has completed successfully.

格式化分区

Linux mkfs 命令 | 菜鸟教程

➜  ~ sudo mkfs.ext4 /dev/sda1
mke2fs 1.46.5 (30-Dec-2021)
丢弃设备块: 完成
创建含有 8388347 个块(每块 4k)和 2097152 个 inode 的文件系统
文件系统 UUID:43804dea-47a3-4eb8-b430-b1c41fd929ae
超级块的备份存储于下列块:
32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
4096000, 7962624

正在分配组表: 完成
正在写入 inode表: 完成
创建日志(32768 个块): 完成
写入超级块和文件系统账户统计信息: 已完成

EXT 分区扩容

可以使用 parted 工具:

➜  ~ sudo parted /dev/sdb
GNU Parted 3.4
使用 /dev/sdb
欢迎使用 GNU Parted!输入 'help' 来查看命令列表。
(parted) help
align-check 类型 N 检查分区 N 是否为 (最小=min|最佳=opt) 对齐类型
help [COMMAND] 打印通用求助信息,或 COMMAND 的帮助
mklabel,mktable LABEL-TYPE 创建新的磁盘卷标 (分区表)
mkpart 分区类型 [文件系统类型] 起始点 结束点 创建一个分区
name 编号 名称 将指定“编号”的分区命名为“名称”
print [devices|free|list,all|数字] 显示分区表、可用设备、剩余空间、所有分区或特殊分区
quit 退出程序
rescue 起始点 终止点 挽救临近“起始点”、“终止点”的遗失的分区
resizepart NUMBER END 改变 NUMBER 的大小
rm NUMBER 删除编号为 NUMBER 的分区
select 设备 选择要编辑的设备
disk_set 旗标 状态 变更已选设备上的旗标
disk_toggle [旗标] 切换已选设备上的旗标状态
set 编号 旗标 状态 改变指定“编号”分区的旗标
toggle [编号 [旗标]] 切换“编号”分区上的“旗标”状态
unit 单位 设置缺省的“单位”
version 显示目前 GNU Parted 的版本与版权信息
  1. 先查看当前磁盘分区:

    (parted) print
    警告: 并非所有可用于 /dev/sdb 的空间都被用到了,您可以修正 GPT 以使用所有的空间 (额外的 100663296 个区块),还是说要继续使用目 前的设置?
    修正/Fix/忽略/Ignore? Fix
    型号:Msft Virtual Disk (scsi)
    磁盘 /dev/sdb: 85.9GB
    扇区大小 (逻辑/物理):512B/4096B
    分区表:gpt
    磁盘标志:

    编号 起始点 结束点 大小 文件系统 名称 标志
    1 1049kB 34.4GB 34.4GB ext4 Linux filesystem
  2. 修改分区大小:

    (parted) resizepart 1 100%
    警告: 分区 /dev/sdb1 正被使用。你确定要继续吗?
    是/Yes/否/No? yes
    (parted) print
    型号:Msft Virtual Disk (scsi)
    磁盘 /dev/sdb: 85.9GB
    扇区大小 (逻辑/物理):512B/4096B
    分区表:gpt
    磁盘标志:

    编号 起始点 结束点 大小 文件系统 名称 标志
    1 1049kB 85.9GB 85.9GB ext4 Linux filesystem

    此处的 100% 将使用整块磁盘;可以指定大小:60G

  3. 退出 parted 工具:

    (parted) quit
    信息: 你可能需要 /etc/fstab。

最后使用 resize2fs 工具调整文件系统大小:

➜  ~ sudo resize2fs /dev/sdb1
resize2fs 1.46.5 (30-Dec-2021)
/dev/sdb1 上的文件系统已被挂载于 /home/yueplus;需要进行在线调整大小
old_desc_blocks = 4, new_desc_blocks = 10
/dev/sdb1 上的文件系统大小已经调整为 20971259 个块(每块 4k)。

最后确认效果:

➜  ~ lsblk -f /dev/sdb
NAME FSTYPE FSVER LABEL UUID FSAVAIL FSUSE% MOUNTPOINTS
sdb
└─sdb1 ext4 1.0 43804dea-47a3-4eb8-b430-b1c41fd929ae 74G 1% /home/yueplus
➜ ~ df -ah /dev/sdb1
文件系统 大小 已用 可用 已用% 挂载点
/dev/sdb1 79G 1.1G 74G 2% /home/yueplus

开机自动挂载分区

/etc/fstab
# /etc/fstab: static file system information.
#
# Use 'blkid' to print the universally unique identifier for a
# device; this may be used with UUID= as a more robust way to name devices
# that works even if disks are added and removed. See fstab(5).
#
# <file system> <mount point> <type> <options> <dump> <pass>
# / was on /dev/vg0/lv-1 during curtin installation
/dev/disk/by-id/dm-uuid-LVM-AqdAu0yWzaWvtvxAQo6DEql8z6w6PrsQ0CQULCyvbs8VNkn21MgwAEIyZaXXdK28 / ext4 defaults 0 1
# /boot was on /dev/vg0/lv-0 during curtin installation
/dev/disk/by-id/dm-uuid-LVM-AqdAu0yWzaWvtvxAQo6DEql8z6w6PrsQAfi4fkX3X7fZ6KzlpjeXSeQiRdE1fPm1 /boot ext4 defaults 0 1
/swap.img none swap sw 0 0

/dev/disk/by-uuid/43804dea-47a3-4eb8-b430-b1c41fd929ae /home/yueplus ext4 defaults 0 2