从命令行调整 ext4 分区(或任何类型分区,具体取决于方法)大小的最简单方法是什么(可能使用最少的命令,但也是最容易理解的)?
在 GUI 中使用像 Gparted 这样的工具显然很容易,但是在命令行中呢?我想基于文本的 GUI 也可以算作答案,因为它在技术上仍然在命令行中。它只需要简单即可。
我所说的分区是指个人计算机(例如笔记本电脑)的单个磁盘上的简单分区。例如,我想调整大小/dev/sda4
。没有 RAID,只有一个磁盘驱动器,这里没有任何复杂的事情。只是单个磁盘上的简单分区(/dev/sda 上的 /dev/sdaX)。
答案1
您可以fdisk
在运行时更改分区表。参考在 Linux 上实时调整 ext4 文件系统的大小
(在代码的沉默博客):
免责声明: 如果您犯了错误,以下说明很容易毁掉您的数据。我在执行以下操作之前备份的虚拟机上执行此操作。如果您因未执行备份而丢失数据,请不要过来抱怨。
...
第一:增加磁盘大小。
在 ESXi 中这很简单,只需增加虚拟磁盘的大小即可。现在您有了更大的硬盘,但您仍然需要 a) 增加分区大小和 b) 调整文件系统大小。
第二:增加分区大小。
您可以
fdisk
在运行时更改分区表。原生 Ubuntu 安装创建了 3 个分区:一个主分区 (sda1),一个扩展分区 (sda2),其中有一个逻辑分区 (sda5)。扩展分区仅用于交换,因此我可以轻松移动它而不会丢失任何数据。
删除主分区
删除扩展分区
创建一个新的主分区,从与原始分区相同的扇区开始,只是大小更大(留一些用于交换)
创建一个新的扩展分区,其中包含逻辑分区以保存交换空间
me@ubuntu:~$ sudo fdisk /dev/sda Command (m for help): p Disk /dev/sda: 268.4 GB, 268435456000 bytes 255 heads, 63 sectors/track, 32635 cylinders, total 524288000 sectors Units = sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0x000e49fa Device Boot Start End Blocks Id System /dev/sda1 * 2048 192940031 96468992 83 Linux /dev/sda2 192942078 209713151 8385537 5 Extended /dev/sda5 192942080 209713151 8385536 82 Linux swap / Solaris Command (m for help): d Partition number (1-5): 1 Command (m for help): d Partition number (1-5): 2 Command (m for help): n Partition type: p primary (0 primary, 0 extended, 4 free) e extended Select (default p): p Partition number (1-4, default 1): Using default value 1 First sector (2048-524287999, default 2048): Using default value 2048 Last sector, +sectors or +size{K,M,G} (2048-524287999, default 524287999): 507516925 Command (m for help): p Disk /dev/sda: 268.4 GB, 268435456000 bytes 255 heads, 63 sectors/track, 32635 cylinders, total 524288000 sectors Units = sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0x000e49fa Device Boot Start End Blocks Id System /dev/sda1 2048 507516925 253757439 83 Linux Command (m for help): n Partition type: p primary (1 primary, 0 extended, 3 free) e extended Select (default p): e Partition number (1-4, default 2): 2 First sector (507516926-524287999, default 507516926): Using default value 507516926 Last sector, +sectors or +size{K,M,G} (507516926-524287999, default 524287999): Using default value 524287999 Command (m for help): p Disk /dev/sda: 268.4 GB, 268435456000 bytes 255 heads, 63 sectors/track, 32635 cylinders, total 524288000 sectors Units = sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0x000e49fa Device Boot Start End Blocks Id System /dev/sda1 2048 507516925 253757439 83 Linux /dev/sda2 507516926 524287999 8385537 5 Extended Command (m for help): n Partition type: p primary (1 primary, 1 extended, 2 free) l logical (numbered from 5) Select (default p): l Adding logical partition 5 First sector (507518974-524287999, default 507518974): Using default value 507518974 Last sector, +sectors or +size{K,M,G} (507518974-524287999, default 524287999): Using default value 524287999 Command (m for help): p Disk /dev/sda: 268.4 GB, 268435456000 bytes 255 heads, 63 sectors/track, 32635 cylinders, total 524288000 sectors Units = sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0x000e49fa Device Boot Start End Blocks Id System /dev/sda1 2048 507516925 253757439 83 Linux /dev/sda2 507516926 524287999 8385537 5 Extended /dev/sda5 507518974 524287999 8384513 83 Linux Command (m for help): t Partition number (1-5): 5 Hex code (type L to list codes): 82 Changed system type of partition 5 to 82 (Linux swap / Solaris) Command (m for help): p Disk /dev/sda: 268.4 GB, 268435456000 bytes 255 heads, 63 sectors/track, 32635 cylinders, total 524288000 sectors Units = sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0x000e49fa Device Boot Start End Blocks Id System /dev/sda1 2048 507516925 253757439 83 Linux /dev/sda2 507516926 524287999 8385537 5 Extended /dev/sda5 507518974 524287999 8384513 82 Linux swap / Solaris Command (m for help): w The partition table has been altered! Calling ioctl() to re-read partition table. WARNING: Re-reading the partition table failed with error 16: Device or resource busy. The kernel still uses the old table. The new table will be used at the next reboot or after you run partprobe(8) or kpartx(8) Syncing disks. me@ubuntu:~$ sudo reboot
后来我注意到我没有设置可启动标志,但显然你并不真的需要它。
第三:扩大文件系统。
您可以
resize2fs
在已安装的分区上在线执行此操作。me@ubuntu:~$ df -h Filesystem Size Used Avail Use% Mounted on /dev/sda1 91G 86G 12M 100% / udev 3.9G 4.0K 3.9G 1% /dev tmpfs 1.6G 696K 1.6G 1% /run none 5.0M 0 5.0M 0% /run/lock none 3.9G 144K 3.9G 1% /run/shm none 100M 16K 100M 1% /run/user me@ubuntu:~$ sudo resize2fs /dev/sda1 resize2fs 1.42.5 (29-Jul-2012) Filesystem at /dev/sda1 is mounted on /; on-line resizing required old_desc_blocks = 6, new_desc_blocks = 16 The filesystem on /dev/sda1 is now 63439359 blocks long. me@ubuntu:~$ df -h Filesystem Size Used Avail Use% Mounted on /dev/sda1 239G 86G 142G 38% / udev 3.9G 12K 3.9G 1% /dev tmpfs 1.6G 696K 1.6G 1% /run none 5.0M 0 5.0M 0% /run/lock none 3.9G 152K 3.9G 1% /run/shm none 100M 36K 100M 1% /run/user
轻微的问题:重新启动后,交换空间不活动。结果你需要运行
mkswap
,调整/etc/fstab
到新的 UUID 并打开交换me@ubuntu:~$ sudo mkswap /dev/sda5 Setting up swapspace version 1, size = 8384508 KiB no label, UUID=141d401a-b49d-4a96-9b85-c130cb0de40a me@ubuntu:~$ sudo swapon --all --verbose swapon on /dev/sda5 swapon: /dev/sda5: found swap signature: version 1, page-size 4, same byte order swapon: /dev/sda5: pagesize=4096, swapsize=8585740288, devsize=8585741312
编辑
/etc/fstab
以将旧交换分区的 UUID 替换为mkswap
.
答案2
我回答这个问题是为了防止你遇到和我类似的情况。我必须在以 Guest 身份运行 Ubuntu 18.0.4 LTS 的动态磁盘上调整文件系统 (Ext4) 的大小。我设法从主机调整磁盘大小,然后调整文件系统大小。
无法运行常用命令。例如:
$ resize2fs /dev/sda2
resize2fs 1.44.1 (24-Mar-2018)
The filesystem is already 13180160 (4k) blocks long. Nothing to do!
而且fdisk
相当复杂,可能我还必须运行 LiveCD 才能在未安装的磁盘上工作。
这两个命令轻松快速地解决了我的问题:
$ growpart /dev/sda 2
CHANGED: partition=2 start=4096 old: size=105441280 end=105445376 new: size=409595871,end=409599967
$ resize2fs /dev/sda2
resize2fs 1.44.1 (24-Mar-2018)
Filesystem at /dev/sda2 is mounted on /; on-line resizing required
old_desc_blocks = 7, new_desc_blocks = 25
The filesystem on /dev/sda2 is now 51199483 (4k) blocks long.
注意:2
第一个命令中表示设备上的分区号/dev/sda
。
答案3
如果要增加分区和文件系统的大小,请首先运行fdisk
以增加分区的大小,然后运行resize2fs
以增加文件系统的大小。
如果您要缩小两者的大小,请先运行resize2fs
,然后运行fdisk
。
答案4
诺阿洛的解决方案显然是最好的;比其他的简单得多:
回声“-+”| sfdisk-N<零件号>/dev/sdX
关于其工作原理的简短说明:-N
意味着sfdisk
将在单个分区上工作。当像这样开始时,sfdisk
将是交互式的并等待开始位置、大小和可选的分区类型。 “ -
”表示起始位置不改变,“ +
”表示结束位置将使用尽可能多的空间。之后您将必须使用print
和write
命令。领先者echo "- +" |
在一行中做到了这一点。
它的局限性是必须有可用空间紧接着。如果分区调整大小后,存在交换分区(即里面没有真实数据),也可以通过 轻松解决sfdisk
。使用上面的语法,假设要更改的分区是 onsda1
且 swap on sda2
,我们有一个 128 G 的磁盘,我们需要 6 G 的交换: 第一步是将交换分区移到末尾:
echo "122G +" | sfdisk -N2 /dev/sda
现在展开第一个分区:
echo "- +" | sfdisk -N1 /dev/sda
并使用 调整其大小resize2fs
。您可能必须确保您的新交换得到认可。请参阅swapoff
、mkswap
和swapon
文件fstab
。这不在这个问题的讨论范围之内。
关于命令sda2
:
不要以这种方式移动带有数据的分区! 您将丢失所有数据。该命令不移动数据;只是分区边界。用于 sda1 ( ) 的命令没有危险,- +
因为分区的起始位置没有改变;这就是-
用于单个分区时“ ”的含义。
谢谢你@noalo