为什么在 Ubuntu 服务器之间移动时文件会从外部 USB 硬盘上消失?

为什么在 Ubuntu 服务器之间移动时文件会从外部 USB 硬盘上消失?

当外部硬盘驱动器安装到另一台计算机时,保存在该外部硬盘驱动器上的文件就会消失。

我有两个 Intel NUC,它们在不同的物理位置运行 Ubuntu 20.04 LTS 服务器,每个都配有 2TB 硬盘。我有一个 524GB 的目录,我想将其从 NUC1 移动到 NUC2,因此,与其通过互联网 rsync 它,不如尝试将其从 NUC1 复制到外部 4TB 硬盘上,然后将外部硬盘(格式化为 ExFAT 并使用 GUID 分区方案)移动到 NUC2 并将其复制到 NUC2 上。

首先,我将外部 4TB Seagate USB 驱动器插入 NUC1 并列出块设备:

$ lsblk -e7
NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda      8:0    0  1.8T  0 disk
├─sda1   8:1    0  512M  0 part /boot/efi
└─sda2   8:2    0  1.8T  0 part /
sdb      8:16   0  3.7T  0 disk
├─sdb1   8:17   0  200M  0 part
└─sdb2   8:18   0  3.7T  0 part

因此,我想手动安装 sdb2(4TB 外部驱动器),我将把它安装在 /mnt 上(我习惯在桌面 Ubuntu 实例上保留 /media,以便使用 Nautilus 软件安装卷)。首先,我创建一个要将驱动器安装到的目录:

$ sudo mkdir -p /mnt/4TB 

然后我安装驱动器:

$ sudo mount /dev/sdb2 /mnt/4TB
FUSE exfat 1.3.0 

然后我在已挂载的驱动器上创建一个目录 files/,使用 rsync 将 524GB 的文件复制到该目录,并通过同步确认:

$ sudo mkdir -p /mnt/4TB/files
$ sudo rsync -av /home/foo/files/ /mnt/4TB/files/
$ sync

我的用户 foo 的 uid 和 gid 是 1000。复制过程花费了好几个小时。我确认文件确实在那里:

$ sudo df -H
Filesystem      Size  Used Avail Use% Mounted on
udev            4.1G     0  4.1G   0% /dev
/dev/sda2       2.0T  1.7T  228G  88% /
/dev/sdb2       4.1T  524G  3.6T  13% /mnt/4TB
(ignoring all the tmpfs and loop lines)

我卸载了外部驱动器:

sudo umount /dev/sdb2 

我从 NUC1 上拔下外部 USB 驱动器,驱动 5 个小时,然后将外部驱动器插入 NUC2 后反向/重复该过程:

$ lsblk -e7
NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda      8:0    0  1.8T  0 disk
├─sda1   8:1    0  512M  0 part /boot/efi
└─sda2   8:2    0  1.8T  0 part /
sdb      8:16   0  3.7T  0 disk
├─sdb1   8:17   0  200M  0 part
└─sdb2   8:18   0  3.7T  0 part

$ sudo mkdir -p /mnt/4TB

$ sudo mount /dev/sdb2 /mnt/4TB
FUSE exfat 1.3.0

外部驱动器上的文件/目录在那里:

$ cd /mnt/4TB/
$ ls -l
total 256
drwxrwxrwx 1 root root 262144 Nov 12 04:43 files

...但里面什么也没有:

$ sudo df -H
Filesystem      Size  Used Avail Use% Mounted on
udev            8.3G     0  8.3G   0% /dev
/dev/sda2       2.0T  7.7G  1.9T   1% /
/dev/sdb2       4.1T  103M  4.1T   1% /mnt/4TB

当我尝试将不存在的文件从外部驱动器复制到 NUC2 时,当然什么也没有发生:

$ sudo rsync -av /mnt/4TB/files/ /home/foo/files/
sending incremental file list 
./

sent 41 bytes  received 19 bytes  120.00 bytes/sec
total size is 0  speedup is 0.00

NUC2 上我的用户 foo 的 uid 和 gid 是 1002。

发生了什么事?文件在哪里?我不明白什么?

答案1

我不知道您的文件为何消失,但我可以告诉您如何更可靠地确保它们将来不会消失。您写道,您将外部 4TB Seagate USB 驱动器格式化为具有 GUID 分区方案的 ExFAT。ExFAT(可扩展文件分配表)是 Microsoft 推出的专有文件系统。我一直发现 ExFAT 卷在 Ubuntu 上存在问题。要在 Ubuntu 上使用 ExFAT 外部驱动器,您需要安装支持软件包:

sudo apt update
sudo apt install exfat-fuse exfat-utils

或者,我建议您只使用 Linux 原生的 ext4 日志文件系统(或第四个扩展文件系统)作为许多发行版(包括 Debian 和 Ubuntu)的默认文件系统。这样您就可以充分利用 Ubuntu 的所有开源和原生功能。

以下是我的建议:

  1. 使用 ext4 格式化您的 sdb 4TB 外置硬盘(参考https://help.ubuntu.com/community/InstallingANewHardDrive):
$ sudo mkfs -t ext4 /dev/sdb
  1. 像之前一样在 NUC1 上安装格式化的 sdb 驱动器:
$ sudo mkdir -p /mnt/4TB/ (as required)
$ sudo mount /dev/sdb /mnt/4TB
  1. 像以前一样在已安装的驱动器上创建文件/目录,您可以使用 rsync 将 524GB 的文件复制到该目录中,并通过同步确认 - 请注意我建议对 rsync 进行的更改:
$ sudo mkdir -p /mnt/4TB/files
$ sudo rsync -avhW --no-compress --progress /home/foo/files/ /mnt/4TB/files/
$ sync
  1. 卸载您的硬盘,将其物理移除并将其驱动到其他位置:
sudo umount /dev/sdb
  1. 将驱动器安装到您的 NUC2 上,然后使用 rsync 将文件复制到其内部驱动器(如果您不想在完成后将文件复制到外部驱动器,请不要忘记卸载外部驱动器):
$ sudo mkdir -p /mnt/4TB/ (as required)
$ sudo mount /dev/sdb /mnt/4TB
$ sudo mkdir -p /home/foo/files/ (as required)
$ sudo rsync -avhW --no-compress --progress /mnt/4TB/files/ /home/foo/files/
$ sync

请让我知道这是否对你有用。

相关内容