我有 2 个 USB 记忆棒,每个 8GB:
usb1 = /dev/sdb
usb2 = /dev/sdc
usb1 是一个完整的 dm 加密驱动器,我目前使用 usb2 作为备份,以防 usb1 出现故障。我使用以下命令将 usb1 克隆到 usb2:
dd if=/dev/sdb of=/dev/sdc
这是可行的,因为我已经测试了 usb2,并且一切看起来都完好无损。
我不喜欢这种方法的原因是运行 dd 命令需要大约一个小时。
一旦我克隆了 usb1,是否可以保持 usb1 和 usb2 同步,而不必在每次更改文本文件时使用 dd 克隆整个驱动器?
我可以使用类似 rsync 之类的程序来同步 2 个完全 dm 加密的 USB 驱动器吗?
我可以将 usb1 dd 到 usb2,而无需解密 usb1。我希望存在一种解决方案,让我不必解密 usb1 和 2 即可同步它们。我希望同步程序可以找出二进制级别的差异?
答案1
块设备可以使用以下方式同步同步— 一个快速块设备同步工具。
bdsync
旨在完成 rsync 无法完成的唯一任务:同步块设备。
bdsync "bdsync -s" /dev/LOCDEV /dev/REMDEV > DEV.bdsync
这将生成 /dev/LOCDEV 和 /dev/REMDEV 设备的差异 DEV.rsync,它们都是本地的。
bdsync --patch DEV.bdsync /dev/DSTDEV
将使设备同步。
答案2
替代方案:ecryptfs
在这些情况下,您应该使用基于文件的加密(例如 ecryptfs),而不是基于块的加密解决方案。
优点:
- 假设您对两个设备使用相同的密码,即使未安装 ecryptfs,您也可以 rsync 数据,并节省额外的解密和加密开销。
- 您只需写入比有效载荷多一点的数据,而不是整个分区或容器,从而减少存储单元的磨损。
缺点:
- 文件名加密会限制文件名的长度(如果你的文件系统允许 255字节—与大多数现代文件系统(包括 FAT 和 EXT)一样,限制为 143 个字节。请注意文件名中的多字节字符。
我听说有些人还将 ecryptfs 用于 Dropbox 或 Google Drive 等在线服务。
用法
Ubuntu 安装程序使用 ecryptfs 设置用户主文件夹的加密,因此您可能已经安装了该ecryptfs-utils
软件包。使用 ecryptfs 进行外部媒体加密非常简单,只需对相应的挂载点执行以下命令即可:
sudo mount -t ecryptfs my_mountpoint/ my_mountpoint/
然后会提示以下选项,最后将附加层安装到相同的加密和解密数据的挂载点或目录:
Passphrase:
Select cipher:
1) aes: blocksize = 16; min keysize = 16; max keysize = 32
2) blowfish: blocksize = 8; min keysize = 16; max keysize = 56
3) des3_ede: blocksize = 8; min keysize = 24; max keysize = 24
4) twofish: blocksize = 16; min keysize = 16; max keysize = 32
5) cast6: blocksize = 16; min keysize = 16; max keysize = 32
6) cast5: blocksize = 8; min keysize = 5; max keysize = 16
Selection [aes]:
Select key bytes:
1) 16
2) 32
3) 24
Selection [16]:
Enable plaintext passthrough (y/n) [n]:
Enable filename encryption (y/n) [n]: y
Filename Encryption Key (FNEK) Signature [0000000000000000]:
Attempting to mount with the following options:
ecryptfs_unlink_sigs
ecryptfs_fnek_sig=0000000000000000
ecryptfs_key_bytes=16
ecryptfs_cipher=aes
ecryptfs_sig=0000000000000000
Mounted eCryptfs
如果你使用密码管理器,你应该将汇总ecryptfs_*
选项与密码一起保存。一定要启用文件名加密(FNEK 代表文件名加密密钥)。
使用 ecryptfs 的技巧
查找长文件名
以下命令应该为您提供文件名长度超过 135 个字节(如果我没记错的话是 135 个问号)的文件列表,并且也适用于多字节字符。
LC_ALL=C find . -type f -name '???????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????*'
之所以是 135,是因为当您使用 rsync 传输文件时,它会创建带有前导点和 7 个尾随字符 (
.<my_original_filename>.abcdef
) 的临时文件。如果无法创建临时文件,它会发出警告并继续处理下一个文件。解决长文件名问题
尽可能使用元数据来包含您需要的所有信息或压缩文件名太长的文件。
我在 puddletag 中使用以下模式来重命名文件:
$left($num(%track%, 2) - %title%, 130)
由于文件扩展名,所以是 130。它目前不适用于多字节字符,但我向他们的错误跟踪器提交了一个错误。例如
.flac
。
答案3
使用 lvm 重建驱动器,然后使用 lvmsync 同步它们。https://github.com/mpalmer/lvmsync