/home
这是缩小分区文件系统的方法:
e2fsck /dev/sda1
resize2fs /dev/sda1 150G
截至目前,如果我运行df
它,它将显示分区已从 210G 缩小到 150G(即不对)。
由于我只减小了文件系统大小,如何使用fdisk
或缩小分区大小parted
?
答案1
首先,通常的警告:备份数据。调整分区和文件系统的大小从来都不是 100% 安全的操作。
如果您可以使用带有 GParted 的图形环境,最简单的解决方案是:
将分区重新增长
/dev/sda1
到其包含的文件系统的大小:右键单击它,选择“检查”并应用所有操作;然后将分区缩小到所需大小:右键单击分区,选择“调整大小/移动”,设置所需的“新大小”,确认并应用所有操作; GParted 还负责调整文件系统的大小。
或者,使用命令行工具,您可以使用dumpe2fs
或tune2fs
来获取文件系统的块大小和块计数,并重新创建要收缩的分区,使新分区以与原始分区相同的字节开始,并以该偏移量加上结束收缩的文件系统的大小(以字节为单位)。
parted
这是一个完整的示例,可用于使用 GNU和由常规文件支持的循环设备来操作相关命令:
我们首先创建一个块设备,对其进行分区,并在第一个(也是唯一的)分区上创建一个 210 MiB 文件系统:
$ fallocate -l 211MiB testfile $ sudo losetup -f testfile $ sudo parted /dev/loop0 unit MiB mklabel msdos mkpart primary 1 100%FREE $ lsblk /dev/loop0 NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS loop0 7:0 0 211M 0 loop └─loop0p1 259:0 0 210M 0 part $ sudo mkfs.ext4 -L test -v /dev/loop0p1 210M $ sudo mount /dev/loop0p1 /mnt/temp $ df /mnt/temp Filesystem 1K-blocks Used Available Use% Mounted on /dev/loop0p1 202353 14 187491 1% /mnt/temp
然后我们将文件系统大小调整为 150 MiB,最终处于类似于您问题中描述的状态:
$ sudo umount /mnt/temp $ sudo e2fsck -f /dev/loop0p1 $ sudo resize2fs /dev/loop0p1 150M $ sudo mount /dev/loop0p1 /mnt/temp $ df /mnt/temp Filesystem 1K-blocks Used Available Use% Mounted on /dev/loop0p1 144716 1550 132414 2% /mnt/temp $ sudo umount /mnt/temp
现在,我们根据分区所托管的文件系统的当前大小来获取分区的目标大小:
$ sudo dumpe2fs -h /dev/loop0p1
或者
$ sudo tune2fs -l /dev/loop0p1
相关行是:
Block count: 153600 First block: 1 Block size: 1024
允许我们计算新的分区大小(以字节为单位),如下所示:
153600 * 1024 = 157286400
然后我们需要分区的当前起始字节(假装我们还不知道):
$ sudo parted /dev/loop0 unit b print Number Start End Size Type File system Flags 1 1048576B 221249535B 220200960B primary ext4
现在我们知道新分区将从字节 1048576 开始并在字节结束
1048576 + 157286400 -1 = 158334975
注意
parted
从0开始计数并使用包含区间;因此,必须从分区的大小中减去一个字节才能计算其结束字节。我们现在可以重新创建分区并检查结果:
$ sudo parted /dev/loop0 unit b rm 1 mkpart primary 1048576 158334975 $ lsblk /dev/loop0 NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS loop0 7:0 0 211M 0 loop └─loop0p1 259:0 0 150M 0 part
sudo e2fsck -f /dev/loop0p1
如果您碰巧将分区缩小太多,重新运行会提醒您,以便您在损坏文件系统之前修复它。