如何向非最后一个分区添加空间?

如何向非最后一个分区添加空间?

我在 VMWare 中有一个虚拟化的 Ubuntu 服务器(版本 Linux 服务器 3.2.0-58-generic #88-Ubuntu SMP x86_64 GNU/Linux),如下所示:

硬盘 1 SCSI(0:0) --> 11 Gb /dev/sda1
硬盘 2 SCSI(0:1) --> 30 Gb /dev/sdb1

这台机器有这样的职业:

fdiks-l

Disk /dev/sda: 11.8 GB, 11811160064 bytes
255 heads, 63 sectors/track, 1435 cylinders, total 23068672 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: 0x0001ce75

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *        2048    15958015     7977984   83  Linux
/dev/sda2        15960062    16775167      407553    5  Extended
/dev/sda5        15960064    16775167      407552   82  Linux swap / Solaris

Disk /dev/sdb: 32.2 GB, 32212254720 bytes
255 heads, 63 sectors/track, 3916 cylinders, total 62914560 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: 0x2666a626

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1              63    41961779    20980858+  83  Linux
/dev/sdb2        41961780    62910539    10474380   83  Linux

因此,我的目标是:

  1. 在 Vmware 中创建 spce 到 HD2 (SCSI(0:1))
  2. 把这个空间给 /var (/dev/sdb1)

我的空闲空间是: DF-K

Filesystem      Size  Used Avail Use% Mounted on
/dev/sda1       8,1G  6,7G  944M  88% /
udev            3,2G  4,1k  3,2G   1% /dev
tmpfs           1,3G  500k  1,3G   1% /run
none            5,3M     0  5,3M   0% /run/lock
none            3,2G     0  3,2G   0% /run/shm
/dev/sdb1        22G   19G  1,3G  94% /var
/dev/sdb2        11G  7,4G  2,8G  73% /home

我正在读,但我猜如果我的 /dev/sdb2 (/home) 就在隔壁,我就无法调整 /dev/sdb1 (/var) 的大小,sdb1 的最后一个块是 sdb2 中的下一个。我有什么选择?我在想:

  1. 合并 sdb1 和 sdb2
  2. 为这个新分区添加空间
  3. 再次分割 /var 和 /home,但将最大空间留给 /var

但我不知道...所有这些,都没有丢失任何数据...有什么想法吗?

答案1

您应该在采取任何解决方案之前进行备份,因为任何解决方案都伴随着风险。

您有很多选择,具体取决于停机成本/磁盘空间/正确执行/未来保障。

  1. 最简单的选择可能是在 /sdb 末尾创建一个新分区,并将其安装到需要额外空间的位置。使用符号链接可以帮助您在其后面移动多个目录。停机时间非常少,甚至没有,也不会移动数据。将 /home 移动到新的 /dev/sdb3 并不难 - 只需(在移动过程中,除了您之外没有其他人能够访问 /home)将 /dev/sdb3 安装到新位置,将 /home 移动到新分区,卸载它,编辑 /etc/fstab 以将新磁盘安装在 /home 上。-问题是它很浪费,因为它不会在 /home 和系统的其余部分之间共享空间。

  2. 您可能能够按照您的建议合并和拆分数据,但您也可以使用 gparted 来移动分区。不过我预计这会花一些时间。

  3. 您可以使用 LVM “更好地” 重建虚拟机 - 这将使您在将来添加磁盘和调整块设备大小时拥有更大的灵活性。不幸的是,转换为 LVM 并非易事,而且可能意味着重建虚拟机。

答案2

Davidgo 的回答很好。还有另一种选择:使用文件系统

  1. 理论上你可以转换卸载将 ext3/ext4 迁移到 Btrfs:

    fsck.ext4 -f /dev/sdb1
    btrfs-convert /dev/sdb1
    

    实际上,无论如何您都应该事先备份数据。

  2. 调整您的fstab以便它可以与 Btrfs 配合使用并/var顺利挂载。

  3. 创建一个新的分区或者一个单独的设备,无论哪种方式适合您。
  4. 添加新分区/设备到您的(已挂载的)Btrfs 文件系统:

    btrfs device add /dev/sdb3 /var   # (partition)
    # or
    btrfs device add /dev/sdc /var    # (entire device)
    

相关内容