Шифрование существующего набора данных в ZFS (ZoL 0.8)

$ sed 's/REAL\([^(].*::\)/REAL(kind=r8)\1/' file
var= (var1*REAL(j)-var2*REAL(j)*var3)
REAL(kind=r8) :: pwr10
INTRINSIC REAL
REAL(kind=r16) :: qr(n), qaorg, qx
REAL(kind=r8), DIMENSION(-1:nx, -1:ny) :: arg1
REAL(kind=r8) :: y3

La ​​expresión sed

s/REAL\([^(].*::\)/REAL(kind=r8)\1/

sustituirá todo REALpor REAL(kind=r8)siempre que

  1. La cadena REALno va seguida inmediatamente de (.
  2. Hay un ::en algún lugar más adelante en la misma línea.

De la forma en que lo he escrito, la cadena REALpuede aparecer en cualquier lugar de la línea. Use ^REALen lugar del primero REALen la expresión si la palabra aparece primero en la línea (sin espacios ni nada entre el comienzo de la línea y la palabra ).

3
28.07.2019, 21:04
1 ответ

Да, это так. См. этот простой пример (, протестированный на ZoL 0.8.3 ).

Если вы хотите использовать необработанный ключевой файл (вместо парольной фразы):

dd if=/dev/urandom of=/path/to/keyfile bs=32 count=1
chmod 000 /path/to/keyfile

Сначала создайте снимок:

zfs snapshot -r tank/home@transfer

Затем, как предложено,send | recv(с опцией репликации -R), но укажите свои опции шифрования на принимающей стороне:

zfs send -R tank/home@transfer |
    zfs receive \
        -o encryption=aes-256-gcm \
        -o keyformat=raw \
        -o keylocation=file:///path/to/keyfile \
        tank/newhome

Если смонтирован исходный набор данных, новый сразу не поставится:

cannot mount '/tank/home': directory is not empty

Уничтожьте незашифрованный набор данных и замените его новым:

zfs destroy -r tank/home
zfs rename tank/newhome tank/home

Если в вашем наборе данных нет дочерних элементов, монтировать их просто:

zfs mount tank/home

иначе

zfs list -rH -o name tank/home | xargs -L 1 zfs mount

(или просто zfs mount -a, если у вас нет других наборов данных, которые не следует монтировать ).

Вот и все!

Наконец, уничтожьте снимок, если хотите:

zfs destroy -r tank/home@transfer
5
27.03.2020, 21:00

Теги

Похожие вопросы