有时我会在网上看到“确保你设置 'bs=' 因为默认值会花费太长时间”的评论,以及我自己非常不科学的经验,“这似乎比其他人花费的时间更长上周时间”似乎证明了这一点。因此,每当我使用“dd”(通常在 1-2GB 范围内)时,我都会确保指定 bytes 参数。大约有一半的时间我使用我从中复制的任何在线指南中指定的值;剩下的时间我会从'fdisk -l'列表中选择一些有意义的数字,我认为是较慢的媒体(例如我正在写入的SD卡)。
对于给定的情况(媒体类型、总线大小或其他重要事项),有没有办法确定“最佳”值?容易确定吗?如果没有,是否有一种简单的方法可以达到 90-95%?或者“只选择大于 512 的东西”甚至是正确答案?
我想过自己尝试这个实验,但是(除了工作量很大)我不确定哪些因素会影响答案,所以我不知道如何设计一个好的实验。
我正在调整包含单个 ext4 文件系统(没有 LVM 或其他东西)的 LUKS 加密分区的大小。该cryptsetup FAQ建议删除旧的分区并重新创建它,但是,像浪费了很多时间的声音。因此,我想手动进行,仔细调整分区大小。
到目前为止,我认为我需要这样做:
cryptsetup luksOpen /dev/sdXY ExistingExt4
cryptsetup resize /dev/mapper/ExistingExt4 -b $SECTORS
cryptsetup luksClose ExistingExt4
以上步骤是否正确?
在第 4 步中,我应该选择$SECTORS
什么?这一步有必要吗?该cryptsetup
手册是不是真正描述性的resize
选项:
resize <name>
resizes an active mapping <name>.
If --size (in sectors) is not specified, the size of the underlying
block device is used.
Run Code Online (Sandbox Code Playgroud)
最后,如果我将 ext4 分区缩小 15 GiB,我是否可以安全地假设可以使用parted …
我想使用 cryptsetup 对具有 ext4 文件系统的容器中的目录内容进行加密。容器的大小应该尽可能小,必要时尽可能大,因为我只想写一次然后备份。
首先尝试:将容器的大小设置为内容的大小。
dirsize=$(du -s -B512 "$dir" | cut -f 1)
dd if=/dev/zero of=$container count=$dirsize
losetup /dev/loop0 $container
fdisk /dev/loop0 # 1 Partition with max possible size
cryptsetup luksFormat --key-file $keyFile /dev/loop0
cryptsetup luksOpen --key-file $keyFile /dev/loop0 container
mkfs.ext4 -j /dev/mapper/container
mkdir /mnt/container
mount /dev/mapper/container /mnt/container
rsync -r "$dir" /mnt/container
Run Code Online (Sandbox Code Playgroud)
Rsync 返回没有足够的空间来容纳数据。看起来很合理,因为加密和文件系统必须有一些开销。
我尝试使用相对偏移量:
dirsize=$(($dirsize + ($dirsize + 8)/9))
Run Code Online (Sandbox Code Playgroud)
这可以解决大于 100 MB 的目录的问题,但不能解决小于 50 MB 的目录的问题。
如何确定容器必须比目录大的相应字节数?
cryptsetup ×2
encryption ×2
ext4 ×2
dd ×1
dm-crypt ×1
file-copy ×1
luks ×1
partition ×1
performance ×1