为什么我无法在 2 个 SSD 驱动器之间“rsync”某些文件?

为什么我无法在 2 个 SSD 驱动器之间“rsync”某些文件?

我最近将内容从 1 个 SSD 迁移到另一个 viarsync和 2 个 Linux 服务器:

  • 在 Raspberry Pi 4 (RPi4) 上运行的 Ubuntu 20.0.4.3 LTS
  • 在 x864_64 AMD Ryzen 5 2600X 六核处理器上运行的 Debian 10

笔记:我认为这些细节并不重要,只是将它们拿出来以了解更多背景。

在尝试复制rsync文件时,99.9% 的文件复制没有任何问题,但有一些文件包含特殊字符,例如问号 ( ?)。

...
rsync: open "/mnt/..... ⭐️/CD 3/05. Have You Ever Seen the Rain?.mp3" failed: Invalid argument (22)

-and-

rsync: open "/mnt/..... 09 Squeeze - Is That Love?.mp3" failed: Invalid argument (22)
...

我尝试了许多开关rsync,但没有一个对复制这些特定文件有帮助。目前我正在使用这个rsync命令:

$ rsync -avz --partial --progress --no-o --no-g \
      --no-perms --inplace --exclude 'lost+found' ubuntu@pi-server:/mnt/* .

它似乎是尾随的东西?,但我对为什么会发生这种情况感到困惑。

答案1

总长DR

事实证明,在搜索有关 NTFS-3g 的评论时,我意识到也许我正在尝试使用rsync可能与我的问题相关的文件系统。

来源:将带有特殊字符的文件名复制到外部 ntfs 卷

windows_names 该选项防止使用 Windows 不允许的名称创建文件、目录和扩展属性,因为它包含一些不允许的字符(即九个字符“ * / : < > ? \ | 以及那些代码较少的字符)比 0x20)或者因为最后一个字符是空格或点,仍然可以读取(并重命名)。

检查详情

果然,经过检查,我实际上仍在使用外部 SSD 附带的库存文件系统:

$ parted /dev/sdg -- print
Model: SanDisk Extreme 55AE (scsi)
Disk /dev/sdg: 4001GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:

Number  Start   End     Size    File system  Name         Flags
 1      1049kB  4001GB  4001GB               Extreme SSD  msftdata

然而,我从中复制文件的文件系统是这样的:

$ parted /dev/sda -- print
Model: WD My Passport 262E (scsi)
Disk /dev/sda: 2000GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:

Number  Start   End     Size    File system  Name  Flags
 1      33.6MB  2000GB  2000GB  ext4

因此,要解决此问题,我需要重新格式化目标 SSD,使其成为 ext4 文件系统。

使用 EXT4 设置 SSD

在开始之前,让我们wipefs清除可能残留在该设备上的任何残留分区和文件系统信息。首先我们可以看到它有残留的文件系统,exfat.

$ wipefs /dev/sdg1
DEVICE OFFSET TYPE  UUID      LABEL
sdg1   0x3    exfat 4078-8D8D Extreme SSD
sdg1   0x1c6  atari
sdg1   0x1d2  atari
sdg1   0x1de  atari
sdg1   0x1ea  atari

所以让我们用核武器来摧毁它:

$ wipefs --all --force /dev/sdg1
/dev/sdg1: 8 bytes were erased at offset 0x00000003 (exfat): 45 58 46 41 54 20 20 20
/dev/sdg1: 4 bytes were erased at offset 0x000001c6 (atari): ff ff ff ff
/dev/sdg1: 4 bytes were erased at offset 0x000001d2 (atari): ff ff ff ff
/dev/sdg1: 4 bytes were erased at offset 0x000001de (atari): ff ff ff ff
/dev/sdg1: 4 bytes were erased at offset 0x000001ea (atari): ff ff ff ff

现在删除分区:

$ parted /dev/sdg rm 1
Information: You may need to update /etc/fstab.

现在我们已经干净了:

$ parted /dev/sdg -- print
Model: SanDisk Extreme 55AE (scsi)
Disk /dev/sdg: 4001GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:

Number  Start  End  Size  File system  Name  Flags

现在让我们对其进行分区,在其上放置一个 EXT4 FS,并确认:

$ parted -s -a optimal -- /dev/sdg mkpart primary ext4 0% 100%

$ parted /dev/sdg -- print
Model: SanDisk Extreme 55AE (scsi)
Disk /dev/sdg: 4001GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:

Number  Start   End     Size    File system  Name     Flags
 1      1049kB  4001GB  4001GB               primary

$ mkfs.ext4 /dev/sdg1
mke2fs 1.44.5 (15-Dec-2018)
Discarding device blocks: done
Creating filesystem with 976745984 4k blocks and 244187136 inodes
Filesystem UUID: 8d030a6a-61fe-4918-9937-0ec02d247006
Superblock backups stored on blocks:
    32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
    4096000, 7962624, 11239424, 20480000, 23887872, 71663616, 78675968,
    102400000, 214990848, 512000000, 550731776, 644972544

Allocating group tables: done
Writing inode tables: done
Creating journal (262144 blocks): done
Writing superblocks and filesystem accounting information: done

现在看起来好多了:

$ parted /dev/sdg -- print
Model: SanDisk Extreme 55AE (scsi)
Disk /dev/sdg: 4001GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:

Number  Start   End     Size    File system  Name     Flags
 1      1049kB  4001GB  4001GB  ext4         primary

要获得更多可用于 EXT4 的文件系统空间:

### BEFORE
$ df -h | grep -E "File|/dev/sdg1"
Filesystem                Size  Used Avail Use% Mounted on 
/dev/sdg1                 3.6T   89M  3.4T   1% /mnt


### AFTER
$ df -h | grep -E "File|/dev/sdg1"
Filesystem                Size  Used Avail Use% Mounted on
/dev/sdg1                 3.6T   89M  3.6T   1% /mnt

来源:为什么在 XFS 中格式化后获得的可用空间比 ext4 更多?

返回 rsync

因此,在文件系统正确创建为 EXT4 并安装后,当我们尝试使用名称中rsync包含杂散的文件时,它现在可以正常工作:?

$ rsync -avz --partial --progress --no-o --no-g \
      --no-perms --inplace --exclude 'lost+found' ubuntu@pi-server:/mnt/* .
...
receiving incremental file list
05. Have You Ever Seen the Rain?.mp3
     10,263,388 100%    9.78MB/s    0:00:01 (xfr#1, to-chk=0/1)

sent 59 bytes  received 10,239,698 bytes  2,925,644.86 bytes/sec
total size is 10,263,388  speedup is 1.00
...

参考

相关内容