将主文件夹移动到第二个驱动器上

我电脑上有两个硬盘驱动器。目前第二个驱动器被挂载为"/media/storage"。
我该如何将用户数据从"/home"移动到"/media/storage/home"?
我可以直接将数据移动过去然后简单地创建符号链接吗?

使用usermod命令的答案最简单:创建一个临时管理员用户,切换到该账户,执行usermod -m -d /path/to/non_existent_home_dir username命令,然后切换回你的账户(username),最后删除临时管理员用户。虽然这仍然是5个步骤,但比其他答案要少得多,风险也更小,步骤也更简单。 - Oliver
6个回答

从命令行移动HOME

为了避免在图形环境下工作时产生副作用,我们应该使用Ctrl+Alt+F1从终端执行所有移动HOME的操作。

暂时挂载新分区:

sudo mkdir /mnt/tmp
sudo mount /dev/sdb1 /mnt/tmp

假设/sdb1是新的HOME分区

将HOME复制到新位置:

sudo rsync -avx /home/ /mnt/tmp

我们可以将新分区作为HOME挂载。
sudo mount /dev/sdb1 /home

为了确保所有数据都存在,最简单的方法是在此时删除旧的/home(你可以稍后再做,但那样你将不得不启动一个实时系统来查看旧的主目录)。
sudo umount /home    # unmount the new home first!
sudo rm -rf /home/*  # deletes the old home

让HOME永久化

我们需要知道新分区的UUID,以便在fstab条目中查看:

sudo blkid

请注意或复制/粘贴正确的UUID以编辑您的fstab文件。
sudo nano /etc/fstab   # or any other editor

并在末尾添加以下行:
UUID=<noted number from above>    /home    ext4    defaults   0  2

请注意选择适当的文件系统,例如如果是ext3格式,则选择ext3

重新启动

重新启动后,您的/home将位于新驱动器上,具有充足的空间。


1对我没有起作用。 - corev
2我建议您先退出要移动的个人资料,然后可以使用像usermod这样的分发工具来完成此任务。 - LiveWireBT
成功了!谢谢。重启后我可以删除/mnt/tmp吗? - e9t
@e9t:这只是一个我们创建的挂载点,用于临时挂载我们的HOME目录。可以删除这个挂载点,但这样做不会造成任何损害(并且可能更安全),最好保留它。如果出于任何原因您仍然想要删除它,请特别小心不要在那里挂载任何内容(否则您将有可能无法恢复地删除所有已挂载到/mnt/tmp的数据)。 - Takkat
1我按照这些指示操作我的服务器,现在无法通过SSH访问它(权限被拒绝(公钥):(:(:( - f10w
1这导致19.04版本出现了登录循环。 - Tooniis
我在20.04版本上也遇到了登录循环的问题。原来是我的主目录被root用户所拥有。我通过将其重新归属给自己来解决了这个问题。 - erik

如果你只想移动你的主目录,即 /home/your-username,那么只需将你的主目录复制到其他分区,然后使用“系统”->“管理”->“用户和组”打开用户设置对话框。点击钥匙图标进行身份验证。

alt text

在那之后,选择您想要更改的用户,然后点击属性,进入高级选项卡。

alt text

将主目录更改为新目录,即您复制到其他分区的目录。

3确实。这是一种轻松改变特定用户的主目录位置的好方法。在阅读问题时,我理解这可能是针对全局的/home目录。在这种情况下,您可以在其他设备上创建分区,手动将所有文件移动到那里,然后在/etc/fstab文件中更改挂载点的设备本身。 - jfmessier
3@jfmessier:你应该把那个变成一个回答,而不是一个评论! - Skizz
2如果你在命令行上使用 'cp' 复制你的主目录,最好使用 'cp -rPa *':r 代表递归,P 代表不跟随链接,a 代表保留所有权和权限标志。 - drevicko
2Unity在13.04版本中没有"Users & Groups",只有一个名为"Users"的设置选项,其中不包括这些选项。你能提及一下13.04版本中Unity对应的术语吗? - Torben Gundtofte-Bruun
1如果你使用的是Ubuntu 12.04或更高版本,可能无法使用图形界面的方法,至少对我来说是这样。我不得不使用在这里找到的方法:https://help.ubuntu.com/community/Partitioning/Home/Moving - Kyle Coots
在一般情况下,不包括符号链接可能是一把双刃剑,或者至少如果你在其中有符号链接,那么在没有它们的情况下进行复制将无法得到你想要的结果。 - matanster

官方详细的流程在Ubuntu帮助维基上这里
找到分区的UUID
sudo blkid

设置 Fstab

sudo -H gedit /etc/fstab 

并将这些行添加到其中

UUID=????????   /media/home    ext4    defaults    0  2 

????????替换为预期的/home分区的UUID号码。
保存并关闭fstab文件,然后输入以下命令:
sudo mkdir /media/home

复制 /home 到新的分区

sudo rsync -aXS --progress --exclude='/*/.gvfs' /home/. /media/home/.

检查复制是否成功
sudo diff -r /home /media/home -x ".gvfs/*"

注意:您还可能会看到一些关于找不到文件的错误。这些是由于符号链接指向目前不存在的位置(但在重启后将存在)。您可以忽略这些错误,但请检查其他内容。
为切换准备fstab文件。
sudo -H gedit /etc/fstab

现在编辑您之前添加的行,将/media/home部分更改为简单地写成/home,使其看起来像这样:
UUID=????????   /home   ext4    defaults     0  2 

/home移动到/old_home
cd / && sudo mv /home /old_home && sudo mkdir /home

重新启动或重新挂载全部

使用以下方法重新启动或重新挂载全部:

sudo mount -a

确实。这是一个很好的方法,可以轻松地更改特定用户的主目录位置。在阅读问题时,我理解这可能是针对全局的/home目录。在这种情况下,您可以在其他设备上创建分区,手动将所有文件移动到那里,然后在/etc/fstab文件中更改挂载点的设备本身。

好的,我发现唯一可行的方法是创建另一个用户,赋予其管理员权限,注销主账户,用新账户登录,然后使用usermod命令。

任务:

  • 检查"WD Purple"和"WD Gold"两个硬盘的可用性和格式。
  • 将两个硬盘挂载到Ubuntu文件系统。
  • 将HOME文件夹移动到"WD Gold"硬盘。

相关链接:

格式化硬盘

将所有必要的SATA和电源电缆插入您的硬盘。加载Ubuntu。 按键盘上的键并输入"Disks"。 "Disks"实用程序将被打开: enter image description here

在这个实用程序中,您可以将您的硬盘格式化为Ext4文件系统。 否则,要格式化磁盘,请使用以下命令:
  1. fdisk(man fdisk);
  2. parted(man parted);
  3. mkfs(man mkfs)
例如,但我不确定参数,因为使用了GUI“Disks”:
sudo mkfs.ext4 -L purple /dev/sdb  # not sure with parameters
sudo mkfs.ext4 -L gold   /dev/sdc  # not sure with parameters

请记住,格式化将删除目标硬盘上的所有内容。 如果硬盘上有任何数据并且您不想丢失它们,可以跳过此步骤。
慢速格式化将需要很长时间:对于4TB硬盘,可能需要16到20个小时。
永久挂载磁盘
# Press CTRL+ALT+T and open a console.
# Check your /dev/sdb and /dev/sdc discs are visible:
lsblk
# Create directories for the new HDD WD Purple and WD Gold
sudo mkdir /hdd_purple
sudo mkdir /hdd_gold  # temporary directory
# Temporary mount to the new mount point
sudo mount /dev/sdb1 /hdd_purple
sudo mount /dev/sdc1 /hdd_gold
# Unmount drives
sudo umount /dev/sdb1
sudo umount /dev/sdc1

# Configuration file /etc/fstab has list of all partitions that will be mounted at boot.
# 1. Show and copy UUID of the HDD with this command:
sudo blkid
# My data is:
#     /dev/sdb1: LABEL="purple" UUID="6ce9ec1f-3bf5-420f-8502-1b4f55f2fc60" TYPE="ext4" PARTUUID="a14c8357-a8ce-42e4-9772-64ccfad3e226"
#     /dev/sdc1: LABEL="gold" UUID="1d049c7c-4565-480b-a181-2459e8ff8c1b" TYPE="ext4" PARTUUID="4c691b21-b4e3-4dab-ab91-d7bf7272b2b5"
# Make a backup of that file to be able to revert changes.
sudo cp /etc/fstab /etc/fstab.2018.11.29.bak
# 2. Add a new partitions by editing /etc/fstab file as root:
sudo nano /etc/fstab
# 3. At the bottom of fstab file add 2 lines similar to this:
UUID=6ce9ec1f-3bf5-420f-8502-1b4f55f2fc60   /hdd_purple   ext4   defaults           0  2
UUID=1d049c7c-4565-480b-a181-2459e8ff8c1b   /hdd_gold     ext4   defaults           0  2
# Your UUID have to be different!
# Write the file with keys <Ctrl+O> then <Return>. Quit the editor with <Ctrl+X>.
# If you have Midnight Commander running, then save before quitting with <Ctrl+X>,
# because <Ctrl+O> will switch from nano editor to your MC.

# To see if the drive is mounted correctly we can simulate the mount process at boot with:
sudo mount -a

从命令行中迁移HOME
# To avoid side effects while working in a graphical, environment
# we should perform all actions to move HOME from a terminal with Ctrl+Alt+F3.

# Press <Ctrl+Alt+F3> and swidth to console mode.
# Login in the console mode.

# Copy HOME to the new location:
sudo rsync -avx /home/ /hdd_gold

# Delete everything in the HOME directory.
# Be careful with this command, make sure you have a backup.
rm -rf /home/*

# Make HOME permanent -- edit /etc/fstab configuration file
sudo nano /etc/fstab
# Change string
UUID=1d049c7c-4565-480b-a181-2459e8ff8c1b  /hdd_gold  ext4  defaults  0  2
# to string
UUID=1d049c7c-4565-480b-a181-2459e8ff8c1b  /home      ext4  defaults  0  2
# /hdd_golds change to /home directory

# After a reboot, your /home resides on the new drive having plenty of space.
sudo reboot