Mar. 31st, 2016

keinkeinkein: (v14)


Пост будет технический, но жизненно важный.

Итак, в чем суть проблемы?

Допустим, в домашнем компьютере есть один 8-терабайтный жесткий диск, установлена там Gentoo Linux, жесткий диск зашифрован. Однажды утром демон cron присылает на почту письмо счастья от скрипта, мониторящего S.M.A.R.T.: "Админ локалхоста, поздравляю тебя с первым бэд-блоком!" Допустим, за компьютером человек постоянно работает, он нужен всегда и выключать его нельзя, а человеку особо некогда открываться от важных дел. Допустим, на жесткий диск еще не прошла гарантия, но уже появился первый бэд-блок и контроллер жесткого диска уже пополнил G-list. Рассмотрим случай, когда материнская плата вполне современная: поддерживает SATA hot swapping и UEFI.

Что делать-то?!

1. Не паниковать. Осознать, что раз первый бэд-блок появился, то ферромагнетик в конкретном секторе начал разрушаться, и жесткий диск пора менять. Пойти в магазин и купить новый 8-терабайтный жесткий диск. Подключить новый жесткий к SATA-контроллеру материнки в свободный порт и к разъему питания, не выключая компьютер.

2. Удостовериться через lsblk, что ядерный драйвер увидел устройство. Создать на новом HDD таблицу разделов GUID и vfat-раздел для EFI. Для упрощения процедуры размер раздела лучше сделать таким же, какой был на старом HDD (я обычно делаю этот раздел равным 1 GB). Далее с помощью программы dd скопировать раздел /boot/efi с собранным ядром на новый HDD.

3. Оставшуюся часть нового HDD зашифровать с помощью dm-crypt. Рекомендую шифровать жесткий диск целиком шифром AES с хорошим длинным паролем. Тщательно запомнить пароль (кстати, он не обязан совпадать с паролем от старого жесткого диска). На всякий случай сохранить куда-нибудь заголовок LUKS (cryptsetup умеет это делать).

4. Итого получилось: новый жесткий диск, два раздела, первый раздел - 1 GB, содержит ядро Linux в виде EFI-приложения, второй раздел - огромный криптоконтейнер до самого последнего сектора. Теперь поверх криптоконтейнера LUKS нужно создать уровень абстракции LVM, добавить новый PV (физический том) в VG (группу томов). Теперь нужно переместить все экстенты со старого жесткого диска на новый (читайте документацию по pvmove). Процедура может быть долгой, особенно если параллельно ей смотреть фильмы или как-то иначе нагружать I/O. Но главное - нет необходимости прерывать свою работу за компьютером.

5. Когда процесс завершится, нужно удалить старый жесткий диск из LVM (man vgreduce). Насколько я помню, в коде ядра есть атомарная проверка на наличие экстентов на физическом томе перед его удалением, но если не получится с первого раза, нужно снова запустить pvmove с теми же аргументами, а потом - снова vgreduce. Если новый жесткий диск все-таки имеет размер больше старого (например, купили 10 TB), тогда нужно сделать lvextend и resize2fs (я рассматриваю пример, когда используется ext4, а не btrfs). Важно: лучше оставить в VG немного свободного места на будущее для снапшотов файловых систем. Это очень удобная вещь для консистентных бэкапов.

6. На всякий случай сделайте резервные копии информации о логической структуре нового диска: GPT, LVM, файловые системы (начало, конец, лейблы, UUID, тип). Еще проверьте, что что нигде не используется путей наподобие /dev/disk/by-id/*. Потом запустите sync в терминале. Когда sync успешно отработает, физически отсоедините старый жесткий диск от SATA-контроллера материнки и от шины питания. Поскольку старый HDD тоже был зашифрован криптостойким алгоритмом, его можно тут же отнести в магазин и сдать по гарантии, не боясь того, что кто-то будет копаться в ваших данных, и получить деньги обратно.

Что получилось-то?

Вы перенесли ОС и все свои данные с одного жесткого диска на другой, при этом не выключая компьютер, не перезагружая и не отвлекаясь от работы за компьютером. Старый жесткий диск сдали по гарантии, компенсировав расходы на новый.

Любителям ZFS: а ваша файловая система такое умеет? Как вообще подобные проблемы решаются на десктопах на Solaris?

UPDATE: в комментах подсказали, что ZFS на Linux тоже так умеет.

А в Windows 7 или Windows 10 так можно?

А в Mac OS X?

Сделать перепост:

January 2017

S M T W T F S
123 45 67
8 910 1112 13 14
15161718192021
2223 2425262728
293031    

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Jul. 28th, 2017 02:58 pm
Powered by Dreamwidth Studios