tru*_*ktr 43 command-line filesystems partition
从命令行(可能使用最少的命令,但也是最容易理解的)调整 ext4 分区(或任何类型的分区,具体取决于方法)大小的最简单方法是什么?
在 GUI 中使用 Gparted 之类的工具显然很容易,但是在命令行中呢?我猜基于文本的 GUI 也可以算作答案,因为它在技术上仍然在命令行中。它只需要简单。
我所说的分区是指个人计算机(例如笔记本电脑)的单个磁盘上的简单分区。例如,我想调整/dev/sda4
. 没有 RAID,只有一个磁盘驱动器,这里没有任何复杂的东西。只是单个磁盘上的一个简单分区(/dev/sda 上的 /dev/sdaX)。
pie*_*rop 24
我回答这个问题是为了防止你遇到和我类似的情况。我必须在以 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!
Run Code Online (Sandbox Code Playgroud)
而且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.
Run Code Online (Sandbox Code Playgroud)
注意:2
第一个命令中表示设备上的分区号/dev/sda
。
Thu*_*shi 12
您可以fdisk
在运行时使用更改分区表。请参阅Linux
上ext4 文件系统的实时调整大小(在代码博客的沉默中):
免责声明: 如果您犯了错误,以下说明很容易弄乱您的数据。我在执行以下操作之前备份的 VM 上执行此操作。如果您因为没有执行备份而丢失数据,请不要抱怨。
...
第一:增加磁盘大小。
在 ESXi 中,这很简单,只需增加虚拟磁盘的大小即可。现在你有一个更大的硬盘,但你仍然需要 a) 增加分区大小和 b) 调整文件系统的大小。
第二:增加分区大小。
您可以
fdisk
在运行时使用更改分区表。现有的 Ubuntu 安装创建了 3 个分区:一个主分区 (sda1),一个扩展分区 (sda2),其中包含一个逻辑分区 (sda5)。扩展分区仅用于交换,因此我可以轻松移动它而不会丢失任何数据。
删除主分区
删除扩展分区
创建一个新的主分区,从与原始分区相同的扇区开始,只是具有更大的大小(留下一些用于交换)
创建一个新的扩展分区,其中包含一个逻辑分区来保存交换空间
Run Code Online (Sandbox Code Playgroud)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
在已安装的分区上使用online执行此操作。Run Code Online (Sandbox Code Playgroud)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 并打开交换Run Code Online (Sandbox Code Playgroud)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
.
Ken*_*itt 12
如果您要增加分区和文件系统fdisk
的大小,请先运行以增加分区的大小,然后运行resize2fs
以增加文件系统的大小。
如果您要缩小两者的大小,resize2fs
请先运行,然后再运行fdisk
。
gparted
用于resize2fs
更改分区的大小。它不需要很多参数。下面是我发现有用的。
-M
缩小到文件系统的最小大小。
-p
显示百分比指示器。
-P
打印文件系统的最小大小并退出。
Dys*_*as 7
noalo 的解决方案显然是最好的;\n比其他解决方案简单得多:
\n\necho "- +" | sfdisk -N <partnum> /dev/sd X \n\n
关于其工作原理的简短说明:-N
意味着sfdisk
将在单个分区上工作。当像这样开始时,sfdisk
将是交互式的并等待开始位置、大小和可选的分区类型。“ -
”表示起始位置不改变,“ +
”表示结束位置将使用尽可能多的空间。之后您将必须使用print
和write
命令。领先者echo "- +" |
在一行中做到了这一点。
它的限制是紧接着必须有可用空间。如果分区调整大小后,存在交换分区(即里面没有真实数据),也可以通过 轻松解决sfdisk
。使用上面的语法,假设要更改的\xc2\xa0分区处于打开状态sda1
并且交换打开sda2
,我们有一个128\xe2\x80\xafG磁盘,并且我们需要6\xe2\x80\xafG交换:\nThe\xc2\xa0first步骤是将\xc2\xa0移动交换分区到最后:
echo "122G +" | sfdisk -N2 /dev/sda\n
Run Code Online (Sandbox Code Playgroud)\n现在展开第一个分区:
\necho "- +" | sfdisk -N1 /dev/sda\n
Run Code Online (Sandbox Code Playgroud)\n并使用 调整其大小resize2fs
。您可能必须确保新的交换被识别。\xc2\xa0\n请参阅swapoff
、mkswap
和swapon
文件fstab
。\xc2\xa0\n这个\xc2\xa0 不在这个问题的范围内。
关于命令sda2
:\n不要以这种方式移动带有数据的分区!!!\xc2\xa0\n您将丢失所有数据。\xc2\xa0\n此命令不会移动数据;而是会丢失所有数据。只是分区边界。\xc2\xa0\n用于 sda1 ( ) 的命令没有危险\n因为分区的起始位置没有改变;\n这就是用于单个分区时-\xc2\xa0+
“ ”的含义。-
谢谢你@noalo
\n小智 6
一种可脚本化的方法,假设要调整大小的分区后直接有可用空间:
echo "- +" | sfdisk -N <partnum> /dev/sdX
Run Code Online (Sandbox Code Playgroud)
...紧随其后resize2fs /dev/sdX<partnum>
。
在-
讲述了sfdisk重用现有的start
部门,并+
告诉它使size
尽可能大给出的可用空间。
介绍
从 ProfitBricks 提供的映像部署的典型 Linux 服务器具有单个存储卷/dev/vda
. 如果我们查看一下使用情况,fdisk
我们会看到磁盘分为两个分区。第一个分区/dev/vda1
是操作系统所在的引导分区。第二个分区/dev/vda2
被配置为交换空间。
root@debian:~# fdisk -l /dev/vda
Disk /dev/vda: 50 GiB, 53687091200 bytes, 104857600 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 Disklabel type: dos Disk identifier: 0x0041f8a8
Device Boot Start End Sectors Size Id Type /dev/vda1 2048 96471039 96468992 46G 83 Linux /dev/vda2 96471040 104857599 8386560 4G 82 Linux swap / Solaris
在上面的示例中,总 50 GB 存储卷被分为 46 GB 可用空间和 4 GB 用于交换空间。如果配置后我们发现 46 GB 磁盘空间不够,但我们不想添加额外的存储卷怎么办?目标是增加根文件系统上的可用磁盘空间量。这可以在最小的干扰下完成。我们不需要重新启动服务器!
要求
partprobe
。可以从parted
大多数 Linux 发行版上的软件包安装。fdisk
、swapoff
、mkswap
、swapon
和命令resize2fs
。可能默认可用。提供额外空间
要增加硬盘驱动器的大小,请进入 DCD(数据中心设计器)并升级驱动器。
增加驱动器空间量后,单击“配置”以处理更改。大约需要一分钟,您的硬盘就会更大。
然后我们需要关闭交换 - 因此请确保您可以在没有交换空间的情况下生存几分钟:
root@debian:~# swapoff -a
Run Code Online (Sandbox Code Playgroud)
禁用交换后,我们需要使用以下命令重新配置分区fdisk
:
我们将首先删除两个现有分区。我们运行fdisk /dev/vda
然后使用d
命令删除分区2,然后删除分区1。如下示例:
root@debian:~# fdisk /dev/vda
Command (m for help): d Partition number (1,2, default 2):
Partition 2 has been deleted.
Command (m for help): d Selected partition 1 Partition 1 has been deleted.
现在我们重新创建分区。在示例中,我们有 4 GB 交换空间。因此,我们需要至少为新的交换分区保留那么多的可用空间。
先重新创建/dev/vda1
。按n创建一个新分区。输入p创建主分区。我们可以按Enter键接受第一个扇区的默认值2048 。然后输入分区的大小。您可以输入一个以 GB 为单位的值,因此,如果我们将磁盘增加到 100 GB,我们会减去 4 GB 的交换空间,然后输入+96G表示 96 GB。
Command (m for help): n Partition type p primary (0 primary, 0 extended, 4 free) e extended (container for logical partitions) Select (default p): p Partition number (1-4, default 1): 1 First sector (2048-209715199, default 2048): Last sector, +sectors or +size{K,M,G,T,P} (2048-209715199, default 209715199): +96G
Created a new partition 1 of type 'Linux' and of size 96 GiB.
现在我们按照类似的过程重新创建交换分区。按n,然后按p创建新的主分区。按Enter接受“第一扇区”的默认值。我们还可以再次按Enter键接受“最后一个扇区”的默认值。
Command (m for help): n Partition type p primary (1 primary, 0 extended, 3 free) e extended (container for logical partitions) Select (default p): p Partition number (2-4, default 2): 2 First sector (201328640-209715199, default 201328640): Last sector, +sectors or +size{K,M,G,T,P} (201328640-209715199, default 209715199):
Created a new partition 2 of type 'Linux' and of size 4 GiB.
由于第二个分区将用于交换空间,因此我们需要更改分区类型。这可以通过在提示符下按t来完成fdisk
。然后我们按2选择第二个分区。如果您想查看可用分区类型的列表,请按L,否则输入82以选择“Linux swap / Solaris”。
Command (m for help): t Partition number (1,2, default 2): 2 Partition type (type L to list all types): L
0 Empty 24 NEC DOS 81 Minix / old Lin bf Solaris 1 FAT12 27 Hidden 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 hidden or c6 DRDOS/sec (FAT- 4 FAT16 <32M 40 Venix 80286 85 Linux extended c7 Syrinx 5 Extended 41 PPC PReP Boot 86 NTFS volume set da Non-FS data 6 FAT16 42 SFS 87 NTFS volume set db CP/M / CTOS / . 7 HPFS/NTFS/exFAT 4d QNX4.x 88 Linux plaintext de Dell Utility 8 AIX 4e QNX4.x 2nd part 8e Linux LVM df BootIt 9 AIX bootable 4f QNX4.x 3rd part 93 Amoeba e1 DOS access a OS/2 Boot Manag 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 hi ea Rufus alignment e W95 FAT16 (LBA) 53 OnTrack DM6 Aux a5 FreeBSD eb BeOS fs f W95 Ext'd (LBA) 54 OnTrackDM6 a6 OpenBSD ee GPT 10 OPUS 55 EZ-Drive a7 NeXTSTEP ef EFI (FAT-12/16/ 11 Hidden FAT12 56 Golden Bow a8 Darwin UFS f0 Linux/PA-RISC b 12 Compaq diagnost 5c Priam Edisk a9 NetBSD f1 SpeedStor 14 Hidden FAT16 <3 61 SpeedStor ab Darwin boot f4 SpeedStor 16 Hidden FAT16 63 GNU HURD or Sys af HFS / HFS+ f2 DOS secondary 17 Hidden HPFS/NTF 64 Novell Netware b7 BSDI fs fb VMware VMFS 18 AST SmartSleep 65 Novell Netware b8 BSDI swap fc VMware VMKCORE 1b Hidden W95 FAT3 70 DiskSecure Mult bb Boot Wizard hid fd Linux raid auto 1c Hidden W95 FAT3 75 PC/IX bc Acronis FAT32 L fe LANstep 1e Hidden W95 FAT1 80 Old Minix be Solaris boot ff BBT Partition type (type L to list all types): 82
fdisk
有用的消息通知我们我们已经更改了分区类型:
Changed type of partition 'Linux' to 'Linux swap / Solaris'.
Run Code Online (Sandbox Code Playgroud)
之后,我们使用w
命令保存并返回到 shell 提示符:
Command (m for help): w
Run Code Online (Sandbox Code Playgroud)
在 shell 提示符之前您可能会收到如下消息:
The partition table has been altered. Calling ioctl() to re-read partition table. Re-reading the partition table failed.: 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).
让我们放弃重新启动,而是使用以下命令告诉内核有关新分区的信息partprobe
:
root@debian:~# partprobe
Run Code Online (Sandbox Code Playgroud)
我们应该返回到 shell 提示符,并且没有任何输出partprobe
。
现在我们需要调整文件系统的大小/dev/vda1
:
root@debian:~# resize2fs /dev/vda1
resize2fs 1.42.12 (29-Aug-2014)
Filesystem at /dev/vda1 is mounted on /; on-line resizing required
old_desc_blocks = 2, new_desc_blocks = 3
Run Code Online (Sandbox Code Playgroud)
文件系统/dev/vda1
现在的长度为 25165824 (4k) 块。
初始化新的交换位置/dev/vda2
:
root@debian:~# mkswap /dev/vda2
Setting up swapspace version 1, size = 4193276 KiB
no label, UUID=c55c25a2-a386-4653-8455-4d9030586dd2
Run Code Online (Sandbox Code Playgroud)
最后,我们编辑/etc/fstab
旧的 UUID 并将其替换为命令输出中返回的新 UUID mkswap
。要更改的行没有“挂载点”值,并且“类型”设置为swap。
# /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>
UUID=332f8fb5-ff1f-4297-b512-f2c93a277296 / ext4 errors=remount-ro 0 1
/dev/fd0 /media/floppy0 auto rw,user,noauto,exec,utf8 0 0
UUID=c55c25a2-a386-4653-8455-4d9030586dd2 none swap sw 0 0
Run Code Online (Sandbox Code Playgroud)
编辑后/etc/fstab
,我们需要再次启用交换:
root@debian:~# swapon -a
Run Code Online (Sandbox Code Playgroud)
核实
df
我们可以使用和/或来验证新的较大磁盘大小fdisk
。
Device Boot Start End Sectors Size Id Type
/dev/vda1 2048 201328639 201326592 96G 83 Linux
/dev/vda2 201328640 209715199 8386560 4G 82 Linux swap / Solaris
Run Code Online (Sandbox Code Playgroud)
我们还可以通过查看以下输出来确认服务器没有重新uptime
启动:
$ uptime
23:54:21 up 7 days, 1:15, 1 user, load average: 0.00, 0.01, 0.05
Run Code Online (Sandbox Code Playgroud)
概括
我们已经成功增加了 Linux 服务器上的可用磁盘空间量。
参考
https://devops.ionos.com/tutorials/increase-the-size-of-a-linux-root-partition-without-rebooting/
或者