如何移动到不同的驱动器或分区?

如何移动到不同的驱动器或分区?

我需要进入一个比我所在位置更大的分区来导入一个不适合我当前所在位置的项目。我还在 Windows 上的虚拟机上运行 Linux。

jack@ubuntu:~$ sudo lsblk -o NAME,FSTYPE,SIZE,MOUNTPOINT,LABEL
NAME   FSTYPE   SIZE MOUNTPOINT LABEL
sda              20G
ââsda1 ext4    15.7G /
ââsda2            1K
ââsda5 swap     4.3G [SWAP]
sdc              40G
ââsdc1 ext4      40G            work
sdb              20G
ââsdb1 ext4      20G /mnt/disk
jack@ubuntu:~$ sudo fdisk -l

Disk /dev/sda: 21.5 GB, 21474836480 bytes
255 heads, 63 sectors/track, 2610 cylinders, total 41943040 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: 0x000750e0

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *        2048    32956415    16477184   83  Linux
/dev/sda2        32958462    41940991     4491265    5  Extended
/dev/sda5        32958464    41940991     4491264   82  Linux swap / Solaris

答案1

如果您将/分区放在 的末尾sda,您将有一个简单的升级过程:

  1. 关闭虚拟机,然后在虚拟机管理界面中调整原始磁盘驱动器的大小。

  2. 启动到单用户模式,调整最后一个分区的大小以扩展到新空间。

  3. 调整文件系统大小

对夹在另外两个分区之间的分区执行此操作可能会带来更多麻烦,而不是值得。

因此,我建议您将分区的部分内容移动/到新磁盘:

  1. 关闭虚拟机,然后添加另一个虚拟磁盘。

    调整其大小以容纳要移动到新磁盘的现有内容/,以及您想要剩余的空间。假设您正在使用 16 GiB 中的 14 GiB /,并且您只想移动/home10 GiB。如果您想要将当前空间增加一倍,则可以将新驱动器设为 20 GiB。

    您不想移动任何核心操作系统目录:/bin/boot/etc/root、 大部分...移动到其他磁盘/usr是安全的。/usr/share/usr/local

  2. 启动备份,最好进入单用户模式。 (如果您没有运行大量后台内容,这将使以后的事情变得更容易。)

    然后,找出/dev您的新磁盘所在的节点。有很多方法去做这个。它是最有可能的/dev/sdb,但/dev/sdc例如,它可能会被放置在先前映射的光盘驱动器之后。

    /dev/sdb为了解释的目的,我们在这里进行假设。

  3. 用于parted对这个新的虚拟磁盘进行分区:

    # parted /dev/sdb
    (parted) mklabel gpt
    (parted) mkpart ext2 1 -1
    (parted) quit
    

    这将接管整个虚拟磁盘。如果将来再次用完磁盘容量,这将允许您使用上面更简单的调整大小过程。

    如果您计划移动大量不相关的目录(例如/home/var/usr/local),最好为每个目录创建一个单独的虚拟磁盘,而不是对一个大磁盘进行分区。分区是我们在真实磁盘世界中容忍的一种黑客行为。当您处理虚拟机时,您可以摆脱多个独立硬盘的成本。

  4. 在临时位置创建并安装新文件系统。我通常称它们为/mnt/newhome

    # mkfs.ext4 /dev/sdb1
    # mkdir -m 400 /mnt/newhome
    # mount /dev/sdb1 /mnt/newhome
    
  5. 复制要移植的树的当前内容,确保复制权限。做这件事有很多种方法:

    # cd /home
    # find . -print | cpio -pd /mnt/newhome
    OR
    # cp -aR * /mnt/newhome
    OR
    # rsync -a * /mnt/newhome
    
  6. 检查/mnt/newhome内容是否可信。例如,是否df -h显示与 大致相同的值?du -h /home

  7. 启动进入单用户模式(如果尚未启动)。

  8. 将旧文件系统移开,然后将新文件系统放在其上:

    # cd /
    # mv home oldhome
    # mkdir -m 400 home
    # umount /mnt/newhome
    # mount /dev/sdb1 /home
    # chmod 755 home
    # chown root.root home
    

    最后两个命令只是示例。为新挂载点提供与旧挂载点相同的所有者、组和权限。 (不要指望复制命令来获取此顶级目录的权限。)

  9. 在出现单用户模式提示时说exit,继续启动至多用户模式。 (或者,init 5例如,如果正常运行级别为 5。)检查一切似乎都适用于新文件系统。

    (不要重新启动来进行此测试!新的文件系统还不会自动挂载。)

  10. 当您对已成功移动该分区感到满意时,请调整/etc/fstab以指向新分区。

    (这超出了本答案的范围。具体细节甚至在 Linux 之间也有所不同,并且一般来说 *ix 之间的差异更大。)

  11. 重启正常。再检查一遍。这一切还有效吗?确保您已安装新的文件系统,而不是旧的文件系统。

  12. 当您确定所有内容都已移动并正确安装时,请释放旧副本占用的空间:rm -rf /oldhome

如果您有多个文件系统要移动,GOTO 2. :)(或者步骤 1,如果您没有一次添加所有新虚拟磁盘。)

如果您使用的 VM 系统知道如何设置稀疏虚拟磁盘(例如 VMware),则不必担心空间浪费。只需按照正常的“收缩”过程来回收现在闲置的空间即可。

还有其他改进。例如,如果您的操作系统使用磁盘标签而不是分区名称或 UUID,您可能需要-L /home为命令提供类似的内容。mkfs.ext4/etc/fstab

相关内容