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


26

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

可以在Ubuntu运行时完成此操作,还是需要为此使用LiveCD?

Answers:


27

使用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/

然后将此行添加到/etc/fstab

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

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

删除旧文件

重新启动后,/usr根分区上的旧文件将被上安装的新分区隐藏/usr。但是,我们可以使用一些mount绑定技巧来获取旧文件,然后将其删除。

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

但是有些轻微的错误(例如,当您只键入时,按Enter键sudo rm -rf /mnt)可能会造成灾难,因此,只有在您对自己的工作非常有信心,真的无法应对任何停机时间或没有停机的情况下,我才会使用此方法对计算机的物理访问,因此无法从活动CD或活动USB闪存盘引导。


4
rsynccp
Marco Ceppi

1
@MarcoCeppi您可以扩展一下吗?也许给一个rsync替代的答案,而不是使用?
卡扎尔克2014年

6
将cp命令替换为rsync -avz。Rsync允许您重新启动副本,通常应在分区,块设备或计算机之间移动时使用。
Marco Ceppi

2
不要使用cp。它不保留硬链接。这在将来中断软件包升级。例如/usr/bin/s2p/usr/bin/psed是相同的文件。与一起移动cp将创建该文件的2个独立版本。做吧rsync -aH
oᴉɹǝɥɔ

1
首先,跳过-z标志-它启用压缩,因为您没有通过网络发送文件,这是无用的开销(除非rsync通常足够聪明,可以忽略它,但仍然可以将其删除) 。@AleksandarStefanović,您肯定是要其中的内容,而不是文件夹,而发生这种情况的原因是由于一些rsync怪癖:它rsync -avH a/ b与在第一种情况下rsync -avH a b复制文件夹的内容a(即a/*)和文件夹本身不同在第二。确保在此处使用斜杠。
Darael '16

7

由于大多数使用的库都在/ usr中,因此我不建议在运行Ubuntu时移动该目录。实际上,尝试执行此操作时可能会收到错误消息。因此,最好是使用LiveCD。

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

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


2

注意:我不知道我在做什么,我只是在复制命令并按照其他人的建议去做。这可能是不正确的方法,但它对我有效(至少目前如此)。

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

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

    rsync -avz /usr /media/aleksandar/750b84e2-e65f-4309-ade5-5af0033a937c 
    
  2. 至此,我意识到它已将所有内容复制到/usr分区上的文件夹中,这将不起作用,因此我(使用文件管理器)将所有内容从该文件​​夹复制到了分区的根目录,并删除了该空白文件夹之后。

  3. 编辑/etc/fstab(与Hamish的答案相同,当然要替换为您的UUID)

    UUID=634c31a5-e27c-4e33-ac67-2e22491a30c2 /usr           ext4    defaults        0       2
    
  4. 事实证明这不是很明智的步骤:我将当​​前已安装的/usr分区的名称更改为/usrBACKUP,以使我知道,当我重新引导系统时,实际上它会重新引导到新创建的分区,而不是旧分区。 。之后,屏幕上的所有内容都会出现故障,并且我必须通过长按电源键(就像我一样的天才)来关闭电源。如果您不想让系统故障,请跳过此步骤。

  5. 重新启动系统

  6. 重新引导后,打开系统监视器或类似的应用程序以查看是否/usr已安装新分区,并进行安全检查所有内容是否按计划进行。

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


如果已经接受了一个答案并且您不知道自己在说什么,为什么还要回答一个5岁的问题?
cmks 2016年

2
@cmks,因为我觉得其他答案还不完整-我没有从一个答案中得到完整的解决方案,而且没有一个答案没有足够的详细信息。我觉得可能会遇到这个问题的用户需要帮助。如果有人还需要此问题的信息,则是否已满五岁都没有关系。
AleksandarStefanović16年

1
为什么每个人都要重新启动系统?不应该sudo mount -a让它继续运行吗?
哈根·冯·埃岑

@Hagen我想这只是一个很好的选择
AleksandarStefanović16年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.