В этом руководстве мы рассмотрим создание и монтирование LVM томов на рутованном устройстве Android. Это вторая часть моего проекта «Резервный сервер на Android», но она будет на 80% состоять из работы с LVM и лишь на 20% с UrBackup/Linux Deploy. Первая часть доступна здесь.
По итогам предыдущей части мы развернули Debian 10 на рутованном телефоне Android, установили UrBackup сервер и подключили клиента. Для завершения этой части руководства вам потребуется кое-какое дополнительное оборудование:
- Внешний HDD/SSD с USB-кабелем;
- USB hub/dock с портом для зарядки и (необязательно) ethernet-портом;
- (необязательно) ethernet-кабель.
Более подробно по этим пунктам можете почитать в разделе «Дополнительное оборудование» Части 1.
План
- Краткое знакомство с LVM
- Создание логического тома из внешнего хранилища
- Монтирование созданного тома
- (На будущее) Добавление хранилища
LVM
Для начала мы вкратце познакомимся с LVM (менеджер логических томов). Понимание этого инструмента пригодится вам в принципе, а в данном случае существенно упростит процесс расширения резервного хранилища в будущем. Вот схематичное представление принципа действия LVM:
Надеюсь, эта схема поможет вам разобраться, как он работает. По существу, вам нужно понимать следующее:
- Физические блочные устройства разбиваются на разделы, которые мы размечаем как физические тома.
- Затем мы переопределяем их в логические «пулы», называемые группами томов.
- Группы томов повторно разделяются на логические тома.
В чем вообще смысл? Вот сравнение:
При помощи LVM можно с легкостью брать неиспользуемое пространство хранилища и переопределять его в нужную область. Без LVM потребуется задействовать новые, более емкие устройства хранения, а затем переносить данные на эти устройства, расширяя тем самым хранилище.
После этого старые устройства меньшего размера у нас остаются без использования. Надеюсь, сейчас вам стало более понятно, если же нет, то ничего страшного. Сегодня наш процесс будет более линеен:
Если вы думаете, что: «Как-то все неоправданно усложнено», то ошибаетесь. Было бы глупо, если бы LVM использовался только для этого. Мы же в основном применяем его, чтобы в дальнейшем иметь возможность делать следующее:
Настроив блочное устройство хранения с помощью 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
Эта команда выведет список устройств и разделов. Найдите тот, что совпадает с вашим (размером и # разделов).
Объем моего внешнего диска составляет 160Гб, так что, похоже, это
sde
. Если вы подключили устройство после загрузки, то оно скорее всего будет в списке sdX
последним. Блочные устройства Android расположены в /dev/block
, значит мой внешний диск находится в /dev/block/sde
. Если вы используете стандартный дистрибутив Linux, то ваше устройство будет в /dev/sdX
. D. Разбиение диска на разделы:
fdisk /dev/block/sde
Эта команда запустит среду секционирования
fdisk
. Сначала просмотрите текущую таблицу разделов:p
Как видите, у меня один раздел,
/dev/block/sde1
, занимающий все 149.1Гб.Мы будем разбирать процесс с нуля, поэтому данный раздел я удалю. Это необязательно, и вы можете оставить существующие разделы.
d
Очистив таблицу разделов, я отформатирую диск в DOS/MBT:
o
Это относится только к среде Debian в Linux Deploy. В обычной среде Linux для LVM нет разницы MBT или GPT, потому что эта сигнатура все равно будет в последствии стерта.
Теперь можно либо создать раздел для использования только части блочного устройства, либо задействовать устройство целиком.
Для использования всего пространства диска укажите следующую команду и выйдите:
w
Если же вам нужен раздел, то эту:
n
Для применения установок по умолчанию просто жмите Ввод (как показано красными рамками ниже). В пункте настройки последнего сектора можете прописать, какой объем раздела вам нужен, указав
+
и размер в кибибайтах (К), мебибайтах (М), гибибайтах (G), тебибайтах (T) или пебибайтах (P).Обратите внимание на номер раздела. Если бы я хотел использовать этот раздел, то прописывал бы
/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.B. Перезапустите сервер (на основном экране Linux Deploy нажмите
STOP
, а затем START
).C. Убедитесь, что том смонтирован должным образом.
Для этого подключитесь через SSH к серверу. Выполните:
df -h /path/to/your/mount/point
Просмотрите вывод этой команды. Логический том должен быть перечислен в
Filesystem
. Также убедитесь, что Size
, Used
и Available
отражают адекватные данные.D. Убедитесь, что пользователь «urbackup» по-прежнему обладает разрешениями для использования резервной директории.
В родительском каталоге резервной директории выполните:
ls -l
При необходимости обновите разрешения
Подробно читайте в Части 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
На этом все! Разве не сильно проще, чем переносить все данные на новый диск?