Замена диска в зашифрованном LUKS LVM без потери данных

Я предполагаю, что вы спрашиваете: «Почему DIRNAME/соответствует расширенному регулярному выражению \<[A-Z]+\>, хотя в нем есть символ, который не является заглавной буквой (/)?».

Ваше регулярное выражение соответствует всему, что содержит слово , написанное в верхнем регистре:

$ printf '%s\n' "this is not matched" "this IS matched" | egrep "\<[A-Z]+\>"
this IS matched

\<и \>соответствуют нулевой -ширине «границы слова», т. е. пробелу между «символом слова» и символом другого типа (или началом/концом слова. строка ). Словесный символ — это любой символ из класса[[:alpha:]_](букв и подчеркивания ).

Ваше выражение соответствует чему-то вроде DIRNAME/, так как DIRNAMEсоответствует выражению (, перед Dи послеE)есть граница слова.


Чтобы отфильтровать определенные имена из списка каталогов, не используйте grepили другие средства работы с текстом на основе строки -. Имена файлов могут содержать символы новой строки, поэтому инструментам на основе строки -будет трудно делать правильные вещи, если вы не наложите ограничения на имена файлов.

Вместо этого, чтобы получить все имена в верхнем регистре в каталоге вbash:

$ ls -p -d *
DIR/     FILE     TEST123  dir/     file     test123
$ ls -p -d !(*[[:lower:]]*)
DIR/     FILE     TEST123

Для этого требуется shopt -s extglobдля включения расширенных шаблонов подстановки.Расширенный шаблон подстановки !(*[[:lower:]]*)соответствует всему, что не содержит строчных букв.

Обратите внимание, что шаблон не учитывает /, который ls -pдобавляет к именам каталогов. Это связано с тем, что шаблон соответствует именам файлов, и нет имени файла, содержащего символ /. Кроме того, шаблон расширяется перед вызовом ls.

Если вы хотите дополнительно отсеять имена, содержащие цифры, используйте

$ ls -p -d !(*[[:lower:][:digit:]]*)
DIR/  FILE

(это исключает любое имя, которое содержит хотя бы одну строчную букву или цифру )или,

$ ls -p -d !(*[[:lower:]]*|*[[:digit:]]*)
DIR/  FILE

(это исключает любое имя, содержащее хотя бы одну строчную букву, а также исключает любое имя, содержащее хотя бы одну цифру ).

0
15.06.2021, 01:06
1 ответ

НАДЕЮСЬ, ЭТОТ ТЕСТ БУДЕТ ПОЛЕЗЕН КОМУ-ТО В БУДУЩЕМ.

root@Tiburon3:~# pvscan
  PV /dev/mapper/luks_sda     VG bck_vg          lvm2 [<232.87 GiB / 0    free]
  PV /dev/mapper/luks_sdb     VG bck_vg          lvm2 [<931.50 GiB / 0    free]
  PV /dev/mapper/luks_sdc     VG bck_vg          lvm2 [<1.82 TiB / 0    free]
  PV /dev/mapper/luks_sdd     VG bck_vg          lvm2 [149.03 GiB / 0    free]
  PV /dev/mapper/luks_sde     VG bck_vg          lvm2 [<1.82 TiB / 0    free]
  PV /dev/mapper/luks_sdf     VG bck_vg          lvm2 [<1.82 TiB / 0    free]
  PV /dev/mapper/luks_sdg     VG bck_vg          lvm2 [<931.50 GiB / 0    free]
  PV /dev/mapper/luks_sdh     VG bck_vg          lvm2 [149.03 GiB / 79.83 GiB free]
  PV /dev/mapper/sdb5_crypt   VG Tiburon3-vg     lvm2 [<148.53 GiB / <111.28 GiB free]
  Total: 9 [7.94 TiB] / in use: 9 [7.94 TiB] / in no VG: 0 [0   ]

root@Tiburon3:~# df -hP /tiburon_backup/
Filesystem                     Size  Used Avail Use% Mounted on
/dev/mapper/bck_vg-lv_tib_bck  7.7T   93M  7.3T   1% /tiburon_backup

#ЗАПОЛНЕНИЕ ФС фиктивными данными для достижения конца VG:

cd /tiburon_backup/

FROMHERE=848
for ((i=FROMHERE; i>=1; i--))
do
    fallocate -l 10GB gentoo_root$i.img
done


root@Tiburon3:/tiburon_backup# df -hP /tiburon_backup/
Filesystem                     Size  Used Avail Use% Mounted on
/dev/mapper/bck_vg-lv_tib_bck  7.7T  7.3T   20G 100% /tiburon_backup

fallocate -l 10G gentoo_root000.img

root@Tiburon3:/tiburon_backup# pvscan
  PV /dev/mapper/luks_sda     VG bck_vg          lvm2 [<232.87 GiB / 0    free]
  PV /dev/mapper/luks_sdb     VG bck_vg          lvm2 [<931.50 GiB / 0    free]
  PV /dev/mapper/luks_sdc     VG bck_vg          lvm2 [<1.82 TiB / 0    free]
  PV /dev/mapper/luks_sdd     VG bck_vg          lvm2 [149.03 GiB / 0    free]
  PV /dev/mapper/luks_sde     VG bck_vg          lvm2 [<1.82 TiB / 0    free]
  PV /dev/mapper/luks_sdf     VG bck_vg          lvm2 [<1.82 TiB / 0    free]
  PV /dev/mapper/luks_sdg     VG bck_vg          lvm2 [<931.50 GiB / 0    free]
  PV /dev/mapper/luks_sdh     VG bck_vg          lvm2 [149.03 GiB / 79.83 GiB free]

  rm -f gentoo_root[1-9]*


root@Tiburon3:/tiburon_backup# df -hP.
  Filesystem                     Size  Used Avail Use% Mounted on
  /dev/mapper/bck_vg-lv_tib_bck  7.7T   10G  7.3T   1% /tiburon_backup


root@Tiburon3:/tiburon_backup# du -sh *
  10G   gentoo_root000.img

root@Tiburon3:/# 
btrfs filesystem resize -1T /tiburon_backup
Output:
Resize '/tiburon_backup' of '-1T'

Обратите внимание, это заняло довольно много времени по сравнению с изменением размера пустой fs.

Интересно, мог ли я использовать какой-нибудь --прогресс или --подробный параметр, чтобы увидеть больше вывода.

root@Tiburon3:/tiburon_backup# df -hP.
Filesystem                     Size  Used Avail Use% Mounted on
/dev/mapper/bck_vg-lv_tib_bck  6.8T   12G  6.8T   1% /tiburon_backup


umount /tiburon_backup


root@Tiburon3:/# pvscan
  PV /dev/mapper/luks_sda     VG bck_vg          lvm2 [<232.87 GiB / <232.87 GiB free]
  PV /dev/mapper/luks_sdb     VG bck_vg          lvm2 [<931.50 GiB / <931.50 GiB free]
  PV /dev/mapper/luks_sdc     VG bck_vg          lvm2 [<1.82 TiB / 0    free]
  PV /dev/mapper/luks_sdd     VG bck_vg          lvm2 [149.03 GiB / 149.03 GiB free]
  PV /dev/mapper/luks_sde     VG bck_vg          lvm2 [<1.82 TiB / 0    free]
  PV /dev/mapper/luks_sdf     VG bck_vg          lvm2 [<1.82 TiB / 469.00 GiB free]
  PV /dev/mapper/luks_sdg     VG bck_vg          lvm2 [<931.50 GiB / <931.50 GiB free]

  PV /dev/mapper/luks_sdh     VG bck_vg          lvm2 [149.03 GiB / 149.03 GiB free] #Lets remove this one, for testing purposes, smallest size

  PV /dev/mapper/sdb5_crypt   VG Tiburon3-vg     lvm2 [<148.53 GiB / <111.28 GiB free]
  Total: 9 [7.94 TiB] / in use: 9 [7.94 TiB] / in no VG: 0 [0   ]


root@Tiburon3:/# pvdisplay /dev/mapper/luks_sdh
  --- Physical volume ---
  PV Name               /dev/mapper/luks_sdh
  VG Name               bck_vg
  PV Size               149.03 GiB / not usable <3.84 MiB
  Allocatable           yes
  PE Size               4.00 MiB
  Total PE              38152
  Free PE               20437

  Allocated PE          17715   **#allright!, this is the scenario I wanted to test. Data migration before removing the disk.**

  PV UUID               VRhdHD-5aam-9Wha-Qzwg-f8Iz-hosM-Wz0Q3q



root@Tiburon3:/# pvmove /dev/mapper/luks_sdh
    No extents available for allocation.

#На всякий случай я уменьшу LV не на полный 1 ТБ, а на 800 ГБ, этого должно быть достаточно, чтобы переместить оставшиеся выделенные PE из luks _sdh...

root@Tiburon3:/# lvreduce -L -800G /dev/mapper/bck_vg-lv_tib_bck
      WARNING: Reducing active logical volume to <6.94 TiB.
      THIS MAY DESTROY YOUR DATA (filesystem etc.)
    Do you really want to reduce bck_vg/lv_tib_bck? [y/n]: y
      Size of logical volume bck_vg/lv_tib_bck changed from <7.72 TiB (2023191 extents) to <6.94 TiB (1818391 extents).
      Logical volume bck_vg/lv_tib_bck successfully resized.


root@Tiburon3:/# pvmove /dev/mapper/luks_sdh  --alloc anywhere
  /dev/mapper/luks_sdh: Moved: 0.06%
[...]
  /dev/mapper/luks_sdh: Moved: 82.00%
[...]
  /dev/mapper/luks_sdh: Moved: 99.99%
Done!

root@Tiburon3:/# pvdisplay /dev/mapper/luks_sdh
  --- Physical volume ---
  PV Name               /dev/mapper/luks_sdh
  VG Name               bck_vg
  PV Size               149.03 GiB / not usable <3.84 MiB
  Allocatable           yes
  PE Size               4.00 MiB
  Total PE              38152
  Free PE               38152
  
  Allocated PE          0       **#DATA WAS MOVED OUT OF THIS PV!**
  
  PV UUID               VRhdHD-5aam-9Wha-Qzwg-f8Iz-hosM-Wz0Q3q



root@Tiburon3:/# vgreduce bck_vg /dev/mapper/luks_sdh
    Removed "/dev/mapper/luks_sdh" from volume group "bck_vg"


root@Tiburon3:/# mount -a

root@Tiburon3:/# cd /tiburon_backup/

root@Tiburon3:/tiburon_backup# du -sh *
    10G gentoo_root000.img    **#DATA IS INTACT**

Сейчас:

cryptsetup закрыть luks _sdh

Теперь, как было предложено telcoM выше, целесообразно удалить (или закомментировать )luks _sdh из /etc/crypttab и обновите initramfs:

обновление -initramfs -uv

И перезагрузите , чтобы проверить, что он работает должным образом.

Теперь я запущу это на моем Private Prod Env ;)

@telcoM, большое спасибо за ваши предложения!

0
28.07.2021, 11:25

Теги

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