После нескольких ночей работы над этим я наконец нашел надежную последовательность команд для создания и уничтожения форматов ext4 в формате ext4.
Я пришел к этому моменту после нескольких попыток использовать как Tomb, так и Truecrypt, прежде чем наконец переключиться на разветвленную версию Truecrypt под названием tc-play.
Почему я взял под залог эти две другие утилиты? Могила, у меня были проблемы с надежностью. Периодически после операции изменения размера могилы инструмент отказывался принимать парольную фразу, которую я связал с моими ключами могилы. Я мог бы исправить это в конце концов, но кто хочет отлаживать ksh-скрипты весь день? :) Мне очень нравится проект Tomb и надеюсь, что он продолжит быть успешным в будущем.
Собственно трюкрипт? Мне не нравилось доверять предоставляемым двоичным файлам, тем более что в Интернете было много сообщений о людях, которые не могут воспроизвести одни и те же двоичные файлы с одним и тем же источником. Я рад, что проводится аудит этого кода, финансируемый государством. Я также не хотел доверять своей собственной компиляции из исходного кода. Я строю здесь систему резервного копирования и не хочу рисковать, что через 5 лет мне по какой-то причине нужно будет перекомпилировать и сжечь целые выходные, просто чтобы собрать ее с обновленными компиляторами дня ,
Что бы это ни стоило, tc-play включен в репозиторий apt на Ubuntu 13 (и, вероятно, в большинстве других дистрибутивов / версий). В этом коде предполагается, что команды выполняются как обычная учетная запись пользователя, а команды select занесены в белый список через sudoers.
Последнее замечание: я хотел, чтобы все это было доступно для сценариев, несмотря на то, что tc-play требует интерактивного ввода с клавиатуры для сбора парольных фраз. Я знаю, что встраивание паролей в скрипты - это плохая форма, но моя система в любом случае зависит от того, заблокирован ли мой сервер резервного копирования. Если кто-то может получить пароль в скрипте, у меня есть большие проблемы, чтобы беспокоиться.
Так что со всей этой преамбулой здесь мои команды. Не стесняйтесь копировать / вставлять и приправлять по вкусу. Обратная связь приветствуется и приветствуется, если вы заметили какие-либо вопросы или у вас есть предложения:
export ARCHIVE=foo.tc
export SIZE_M=20
export PASSWORDBASE=superdupertopsecret
export CLOUD_DIR=/mnt/cloud/r3cgm/
# create archive
dd if=/dev/zero of=$CLOUD_DIR$ARCHIVE bs=1 count=0 seek=${SIZE_M}M
# find free loopback device
LOOPBACK_DEV=$(sudo losetup -f)
# associate loopback device with archive
sudo losetup $LOOPBACK_DEV $CLOUD_DIR$ARCHIVE
# to enable Expect debugging, add this:
# exp_internal 1
# encrypt loopback device
expect -c "spawn sudo tcplay -c -d $LOOPBACK_DEV -a whirlpool -b AES-256-XTS
set timeout 2
expect Passphrase
send $PASSWORDBASE$ARCHIVE\r
expect Repeat
send $PASSWORDBASE$ARCHIVE\r
expect proceed
send y\r
interact
"
# map loopback device with file container
# DEBUG: sometimes this needs to be run twice / fails the first time, why?
expect -c "spawn sudo tcplay -m $ARCHIVE -d $LOOPBACK_DEV
set timeout 1
expect Passphrase
send $PASSWORDBASE$ARCHIVE\r
expect eof
"
# format archive with ext4
sudo mkfs.ext4 /dev/mapper/$ARCHIVE
[[ -d "/mnt/$ARCHIVE" ]] || sudo mkdir /mnt/$ARCHIVE
# mount archive
sudo mount /dev/mapper/$ARCHIVE /mnt/$ARCHIVE
# UNDO
# unmount archive
sudo umount /mnt/$ARCHIVE
# remove volume
sudo dmsetup remove $ARCHIVE
# delete loopback device
sudo losetup -d $LOOPBACK_DEV
# remove the archive
# rm $CLOUD_DIR$ARCHIVE