[Перевод] Монтирование и управление LVM-томами на Android Linux Deploy. Часть 2

ahazxopmzcwiy60bmnhjmjrbnwo.png

В этом руководстве мы рассмотрим создание и монтирование LVM томов на рутованном устройстве Android. Это вторая часть моего проекта «Резервный сервер на Android», но она будет на 80% состоять из работы с LVM и лишь на 20% с UrBackup/Linux Deploy. Первая часть доступна здесь.

По итогам предыдущей части мы развернули Debian 10 на рутованном телефоне Android, установили UrBackup сервер и подключили клиента. Для завершения этой части руководства вам потребуется кое-какое дополнительное оборудование:

  • Внешний HDD/SSD с USB-кабелем;
  • USB hub/dock с портом для зарядки и (необязательно) ethernet-портом;
  • (необязательно) ethernet-кабель.

Более подробно по этим пунктам можете почитать в разделе «Дополнительное оборудование» Части 1.

План


  1. Краткое знакомство с LVM
  2. Создание логического тома из внешнего хранилища
  3. Монтирование созданного тома
  4. (На будущее) Добавление хранилища

LVM


Для начала мы вкратце познакомимся с LVM (менеджер логических томов). Понимание этого инструмента пригодится вам в принципе, а в данном случае существенно упростит процесс расширения резервного хранилища в будущем. Вот схематичное представление принципа действия LVM:

ahazxopmzcwiy60bmnhjmjrbnwo.png

Надеюсь, эта схема поможет вам разобраться, как он работает. По существу, вам нужно понимать следующее:

  1. Физические блочные устройства разбиваются на разделы, которые мы размечаем как физические тома.
  2. Затем мы переопределяем их в логические «пулы», называемые группами томов.
  3. Группы томов повторно разделяются на логические тома.

В чем вообще смысл? Вот сравнение:

lrbrflizaxp5psz2iktmdc-9d7y.png

ezrrxht1f71uyvl3lf3j2sv8gyw.png

При помощи LVM можно с легкостью брать неиспользуемое пространство хранилища и переопределять его в нужную область. Без LVM потребуется задействовать новые, более емкие устройства хранения, а затем переносить данные на эти устройства, расширяя тем самым хранилище.

После этого старые устройства меньшего размера у нас остаются без использования. Надеюсь, сейчас вам стало более понятно, если же нет, то ничего страшного. Сегодня наш процесс будет более линеен:

7yjj3z6gdxlu35m6uwh0zxad_4q.png

Если вы думаете, что: «Как-то все неоправданно усложнено», то ошибаетесь. Было бы глупо, если бы LVM использовался только для этого. Мы же в основном применяем его, чтобы в дальнейшем иметь возможность делать следующее:

jsj4uulm2paftgmu4cgd6qemdn8.png

Настроив блочное устройство хранения с помощью LVM, мы сможем легко добавлять к нему хранилище позднее без необходимости переноса данных на устройства большего объема. Можно просто добавить еще одно устройство в группу томов и расширить логический том БЕЗ потери данных. На деле это легко как 1 + 1 = 2. Если в ходе чтения руководства вы где-то запутаетесь, то вернитесь к этим схемам и определите, в какой именно части процесса находитесь.

Шаг 1. Создание логического тома из внешнего хранилища


Предполагается, что вы авторизованы как root-пользователь.

A. Установите LVM:

apt -y install lvm2

B. Отобразите udev.

Это касается только среды Linux Deploy. В нормальной среде Linux делать этого не нужно. В Linux Deploy udev будет вызывать различные ошибки в процессе LVM.

Откройте lvm.conf:

nano /etc/lvm/lvm.conf

Найдите следующие строки:
multipath_component_detection = 1
md_component_detection = 1
udev_sync = 1
udev_rules = 1

Измените их на »0»:
multipath_component_detection = 0
md_component_detection = 0
udev_sync = 0
udev_rules = 0

Сохранитесь и выйдите.
Примечание: Вы по-прежнему можете получать ошибки, утверждающие: «Kernel not configured for semaphores (System V IPC). Not using udev synchronisation code.» Игнорируйте.

C. Определение имени для устройства хранения.

Подключите USB-хаб и внешнее устройство хранения. На сервере введите:

lsblk

Эта команда выведет список устройств и разделов. Найдите тот, что совпадает с вашим (размером и # разделов).

fvc-waoblsoxuloujh3ftmszxuy.png

Объем моего внешнего диска составляет 160Гб, так что, похоже, это sde. Если вы подключили устройство после загрузки, то оно скорее всего будет в списке sdX последним. Блочные устройства Android расположены в /dev/block, значит мой внешний диск находится в /dev/block/sde. Если вы используете стандартный дистрибутив Linux, то ваше устройство будет в /dev/sdX.

D. Разбиение диска на разделы:

fdisk /dev/block/sde

Эта команда запустит среду секционирования fdisk. Сначала просмотрите текущую таблицу разделов:
p

Как видите, у меня один раздел, /dev/block/sde1, занимающий все 149.1Гб.

mvgirtfzhqj2biw5vxiejbt7isk.png

Мы будем разбирать процесс с нуля, поэтому данный раздел я удалю. Это необязательно, и вы можете оставить существующие разделы.

d

Очистив таблицу разделов, я отформатирую диск в DOS/MBT:
o

cro3tp-1-ir7ldmilcgrr1x3v54.png

Это относится только к среде Debian в Linux Deploy. В обычной среде Linux для LVM нет разницы MBT или GPT, потому что эта сигнатура все равно будет в последствии стерта.

Теперь можно либо создать раздел для использования только части блочного устройства, либо задействовать устройство целиком.

Для использования всего пространства диска укажите следующую команду и выйдите:

w

Если же вам нужен раздел, то эту:
n

Для применения установок по умолчанию просто жмите Ввод (как показано красными рамками ниже). В пункте настройки последнего сектора можете прописать, какой объем раздела вам нужен, указав + и размер в кибибайтах (К), мебибайтах (М), гибибайтах (G), тебибайтах (T) или пебибайтах (P).

61g4miq9uk82pftbm4a7a8pqlqe.png

Обратите внимание на номер раздела. Если бы я хотел использовать этот раздел, то прописывал бы /dev/block/sde1. Однако в оставшейся части руководства я буду использовать все блочное устройство и ссылаться на него через /dev/block/sde.

Введите и выйдите:

w

E. Создайте физический том для раздела:
pvcreate /dev/block/sde

Менеджер спросит вас об удалении сигнатуры dos; выберите y.
Если возникнет ошибка filtered или not found, вернитесь на предыдущий шаг и убедитесь, что тип disklabel установлен как dos, а не gpt.

F. Создайте группу томов с физическим томом:

vgcreate vg_backup /dev/block/sde

Можете выбрать другое имя для vg_backup.

После создания проверьте детали группы томов:

vgdisplay

Эта команда покажет статус всех групп томов.

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

G. Создайте из группы логический том:

lvcreate -L 149G -n lv_backup vg_backup

  • Замените 149G нужным размером логического тома. Это не обязательно должен быть полный размер группы томов. Если останется свободное место, то можете создать из этой группы и другие логические тома.
  • Замените lv_backup на нужное имя логического тома.
  • Замените vg_backup на имя, которое установили для группы томов на шаге E.

После создания проверьте детали логического тома:
lvdisplay

Вы увидите примерно такой путь: /dev/vg_backup/lv_backup. Игнорируйте его. Ссылаться на логический том мы будем через следующий:
/dev/mapper/vg_backup-lv_backup

Т.е. volume_group_name (тире) logical_volume_name

H. Отформатируйте логический том в EXT4:

mkfs.ext4 /dev/mapper/vg_backup-lv_backup

Шаг 2. Монтирование логического тома


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

В реальной жизни (то есть на нормальной машине Linux) логический том всегда монтируется через добавление в /etc/fstab. В Android нет /etc/fstab, но, к счастью, монтирование может выполнить Linux Deploy.

A. Вернитесь в меню свойств Linux Deploy. Убедитесь, что пункт MOUNTS enabled. Смонтируйте логический том в директорию UrBackup из Части 1.

nrqfortususz91ab3oqe12rh-ti.png

B. Перезапустите сервер (на основном экране Linux Deploy нажмите STOP, а затем START).

C. Убедитесь, что том смонтирован должным образом.

Для этого подключитесь через SSH к серверу. Выполните:

df -h /path/to/your/mount/point

Просмотрите вывод этой команды. Логический том должен быть перечислен в Filesystem. Также убедитесь, что Size, Used и Available отражают адекватные данные.

D. Убедитесь, что пользователь «urbackup» по-прежнему обладает разрешениями для использования резервной директории.

В родительском каталоге резервной директории выполните:

ls -l

ieuwpzdocxxolpnqexiafkcxeto.png

При необходимости обновите разрешения
Подробно читайте в Части 1. Если кратко:
chown urbackup /backup/directory
chgrp urbackup /backup/directory

Если вы не можете изменить разрешения на пользователя urbackup и группу urbackup, то можете установить UrBackup для запуска от лица root-пользователя.

Для этого измените последнюю строку файла конфигурации (/etc/default/urbackupsrv) с urbackup на root. Перезапустите сервер.


E. Авторизуйтесь в веб-интерфейсе UrBackup. Если UrBackup не сможет обратиться к резервной директории, то вы сразу увидите предупреждение. Если оно не возникает, значит все завершилось успешно. Можете приступать к резервному копированию.

(На будущее) Добавление хранилища


A. Создайте логический том по шагам 1.С — 1.E

B. Расширьте группу томов:

vgextend /dev/vg_backup /dev/block/sdX

Убедитесь, что операция vgextend прошла успешно:
vgdisplay

VG Size должен отражать добавление физического тома.

C. Расширьте логический том:

lvextend -L +200G /dev/mapper/vg_backup-lv_backup

Замените +200G значением, на которое хотите расширить логический том.

Убедитесь, что lvextend выполнена успешно:

lvdisplay

LV Size должен отражать произведенное расширение.

D. Измените размер файловой системы, чтобы он соответствовал логическому тому:

resize2fs /dev/mapper/vg_backup-lv_backup

E. Убедитесь, что новый размер отражается в точке монтирования:
df -h /path/to/mount/point

На этом все! Разве не сильно проще, чем переносить все данные на новый диск?
fd2b54bc3722efda2cfd8dc052376907.jpg

oug5kh6sjydt9llengsiebnp40w.png

© Habrahabr.ru