rsync
最近、1つのSSDから2つのLinuxサーバーを介して別のSSDにコンテンツを移行しました。
- Raspberry Pi 4(RPi4)で動作するUbuntu 20.0.4.3 LTS
- x864_64 AMD Ryzen 5 2600X 6コアプロセッサで動作する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
rsync
NTFS-3gのレビューを検索中に、おそらく私の問題と関連がある可能性があるファイルシステムを使用しようとしたことに気づきました。
源泉:特殊文字を含むファイル名を外部NTFSボリュームにコピーする
windows_names このオプションには、一部の許可されていない文字 (たとえば、9 文字 " * / : < > ? \ | と 0x20 より小さいコードを持つ文字) が含まれているため、Windows では許可されていない名前のファイル、ディレクトリ、拡張子属性の生成を防止します。最後の文字はスペースまたはドットなので、まだ読みやすく名前を変更できます。
詳細を確認
もちろん、検査の結果、私は実際に外部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
源泉:ext4よりXFSでフォーマットした後、より多くの空き容量を確保するのはなぜですか?
returnrsync
したがって、ファイルシステムが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
...