我的/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 的回答以及评论):
将所有文件复制到新创建的分区(替换为您的分区的位置,它应该与我的类似):
rsync -avz /usr/* /media/aleksandar/750b84e2-e65f-4309-ade5-5af0033a937c
编辑
/etc/fstab
(与Hamish 的回答(当然,替换xxxxxx
为你的 UUID)UUID=xxxxxx/usr ext4 defaults 0 2
重新启动系统
重新启动后,打开系统监视器或类似的应用程序,查看新
/usr
分区是否已安装,并安全检查一切是否按计划进行。检查一切正常后,您可以删除旧
/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 以重新获得空间!