如何将 /usr 移动到新分区?

如何将 /usr 移动到新分区?

我的/usr文件夹需要移动到新分区。如何才能在不删除内容的情况下完成此操作?

这可以在 Ubuntu 运行时完成吗?还是我需要使用 LiveCD 来完成此操作?

答案1

使用 Live CD 是最安全的,但您可以执行以下操作:

  • 将所有文件复制到新分区,确保/usr执行此操作时内容不会发生变化。
  • 编辑/etc/fstab以便/usr下次重启时安装
  • 重启
  • 删除旧文件

请参阅下文了解每个步骤的详细信息。

请注意,您无法在/usr运行时安装新分区,因为其中将有大量文件/usr处于打开状态。

复制文件

我会使用cp -a.-a是存档选项。从手册页

-a, --archive
          same as -dR --preserve=all
...
-d     same as --no-dereference --preserve=links
...
-P, --no-dereference
          never follow symbolic links in SOURCE
...
--preserve[=ATTR_LIST]
          preserve      the      specified      attributes       (default:
          mode,ownership,timestamps),  if  possible additional attributes:
          context, links, xattr, all
...
-R, -r, --recursive
          copy directories recursively

编辑 /etc/fstab

您需要知道新分区的 UUID。您可以通过执行以下操作来查看映射:

$ ls -l /dev/disk/by-uuid/

或者

$ sudo blkid

然后将这一行添加到/etc/fstab

UUID=634c31a5-e27c-4e33-ac67-2e22491a30c2 /usr           ext4    defaults        0       2

将 UUID 更改为您的 UUID,并更改ext4为您正在使用的文件系统类型 - 如果您已经设置了分区,您应该知道这一点。

删除旧文件

重启后,/usr根分区中的旧文件将被挂载在 上的新分区隐藏/usr。但我们可以使用一些挂载绑定诡计获取旧文件然后删除它们。

$ sudo mount --bind / /mnt
$ sudo rm -rf /mnt/usr/*
$ sudo umount /mnt

但是一些轻微的输入错误(例如,当您只输入时按下 Enter 键sudo rm -rf /mnt)可能会导致灾难,因此,如果您对自己所做的事情非常有信心,真的无法处理任何停机时间,或者没有物理访问机器的权限,因此无法从实时 CD 或实时 USB 启动,我才会使用此方法。

答案2

由于大多数使用的库都在 /usr 中,因此我不建议在运行 Ubuntu 时移动此目录。事实上,当您尝试这样做时,您可能会收到错误消息。因此,最好使用 LiveCD。

您可以使用多种可能性来移动/复制文件 cp、rsync 等。您要确保创建任何符号链接而不仅仅是复制。cp 和 rsync 都有用于此的选项。

将文件移动到其他分区后,您需要在 /etc/fstab 中添加另一个挂载以将新分区挂载到 /usr。

答案3

这是我的做法(遵循Hamish 的回答以及评论):

  1. 将所有文件复制到新创建的分区(替换为您的分区的位置,它应该与我的类似):

     rsync -avz /usr/* /media/aleksandar/750b84e2-e65f-4309-ade5-5af0033a937c 
    
  2. 编辑/etc/fstab(与Hamish 的回答(当然,替换xxxxxx为你的 UUID)

     UUID=xxxxxx/usr           ext4    defaults        0       2
    
  3. 重新启动系统

  4. 重新启动后,打开系统监视器或类似的应用程序,查看新/usr分区是否已安装,并安全检查一切是否按计划进行。

  5. 检查一切正常后,您可以删除旧/usr分区。我会保留我的分区,以防万一出现问题。

答案4

我需要将 /usr 文件夹从根分区移至新分区,因为磁盘已满。这是一个“临时”系统,因此我可以使用可用的 16 GB 内存条,这是我目前唯一可以腾出来的内存条。我在此回顾我所遵循的步骤,希望它们对任何人有帮助。

在硬盘上创建一个新的 GPT、新的 ext4(g、n 和 w 选项)。对我来说,它是在 sdd 上,请小心,找到哪个是你的

sudo fdisk -l /dev/sdd

建立文件系统

sudo mkfs.ext4 /dev/sdd1

把棍子安装在某处

sudo mkdir /mnt/16G
sudo mount /dev/sdd1 /mnt/16G

将所有内容复制到棒上(-a = 保留权限,-h = 人类可读)(使用 rsync 而不是“cp -r /usr /mnt/16G”)

rsync -ah --progress /usr /mnt/16G

找到该棒的 UUID

sudo blkid

放入 fstab 中

sudo nano /etc/fstab
    UUID=40xxxx3f-exx8-4xx3-9xxx-xx055xx34xx5 /usr          ext4    defaults        0       2

关机

sudo poweroff

使用 LiveUsb ubuntu 启动并将原始 /usr 重命名为其他名称,例如 /usr1

在根分区上创建一个新的空文件夹并将其命名为“usr”,用于安装该棒,如 fstab 中所述。否则,下次启动时您将获得一个良好的 initramfs (抱歉,我还没有测试 Hamish Downer 的建议 [$ sudo mount --bind / /mnt] [$ sudo rm -rf /mnt/usr/*] [$ sudo umount /mnt])

重新启动到正常安装

希望我没有忘记或者搞砸任何事情!

编辑:您现在可以删除 /mnt/16G,如果一切顺利,请删除 /usr1 以重新获得空间!

相关内容