Перейти к содержимому

Dev mapper что это

  • автор:

#Как управлять файловой системой Linux?

После добавления диска в сервис диск будет автоматически добавлен в виртуальную машину.
Команда lsblk в Linux выводит список блочных устройств.

[root@weathered-firefly-vs ~]# lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda 8:0 0 50G 0 disk ├─sda1 8:1 0 1G 0 part /boot └─sda2 8:2 0 49G 0 part ├─fedora-root 253:0 0 48G 0 lvm / └─fedora-swap 253:1 0 1G 0 lvm [SWAP] sdb 8:16 0 50G 0 disk sdc 8:32 0 50G 0 disk sr0 11:0 1 1024M 0 rom sr1 11:1 1 376K 0 rom zram0 252:0 0 1.9G 0 disk [SWAP] 
[root@weathered-firefly-vs ~]# lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda 8:0 0 50G 0 disk ├─sda1 8:1 0 1G 0 part /boot └─sda2 8:2 0 49G 0 part ├─fedora-root 253:0 0 48G 0 lvm / └─fedora-swap 253:1 0 1G 0 lvm [SWAP] sdb 8:16 0 50G 0 disk sdc 8:32 0 50G 0 disk sdd 8:48 0 50G 0 disk sr0 11:0 1 1024M 0 rom sr1 11:1 1 376K 0 rom zram0 252:0 0 1.9G 0 disk [SWAP] 

#Создание нового раздела

  1. Используя fdisk , создайте новый раздел на устройстве /dev/sdc . Введите n , чтобы создать новый раздел:
[root@weathered-firefly-vs ~]# fdisk /dev/sdc Welcome to fdisk (util-linux 2.36). Changes will remain in memory only, until you decide to write them. Be careful before using the write command. Device does not contain a recognized partition table. Created a new DOS disklabel with disk identifier 0x58db5961. Command (m for help): n 
  1. Теперь выберите p , чтобы создать новый основной раздел.

Примечание. В вашей системе может быть только 4 основных раздела на этом диске. Если вы уже достигли этого предела, создайте расширенный раздел.

Partition type p primary (0 primary, 0 extended, 4 free) e extended (container for logical partitions) Select (default p): p Partition number (1-4, default 1): 1 
  1. Выберите номер раздела и его первый и последний секторы, если вы нажмете «Enter», то по умолчанию новый раздел будет использовать все доступное дисковое пространство.
First sector (2048-104857599, default 2048): Last sector, +/-sectors or +/-size (2048-104857599, default 104857599): Created a new partition 1 of type 'Linux' and of size 50 GiB. 
  1. Наконец, вам нужно записать разделы на диск с помощью команды w .
Command (m for help): w The partition table has been altered. Calling ioctl() to re-read partition table. Syncing disks. 

Проверьте, был ли создан раздел с помощью команды lsblk .

[root@weathered-firefly-vs ~]# lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda 8:0 0 50G 0 disk ├─sda1 8:1 0 1G 0 part /boot └─sda2 8:2 0 49G 0 part ├─fedora-root 253:0 0 98G 0 lvm / └─fedora-swap 253:1 0 1G 0 lvm [SWAP] sdb 8:16 0 50G 0 disk └─sdb1 8:17 0 50G 0 part └─fedora-root 253:0 0 98G 0 lvm / sdc 8:32 0 50G 0 disk └─sdc1 8:33 0 50G 0 part sdd 8:48 0 50G 0 disk sr0 11:0 1 1024M 0 rom sr1 11:1 1 376K 0 rom zram0 252:0 0 1.9G 0 disk [SWAP] 

#Расширение физического тома, группы томов, логического тома и файловой системы XFS с помощью нового раздела

  1. Сначала введите команду df -hT и выберите из списка системный раздел, который вы хотите расширить. Например, /dev/mapper/fedora-root .
[root@weathered-firefly-vs ~]# df -hT Filesystem Type Size Used Avail Use% Mounted on devtmpfs devtmpfs 1.9G 0 1.9G 0% /dev tmpfs tmpfs 2.0G 0 2.0G 0% /dev/shm tmpfs tmpfs 786M 1000K 785M 1% /run /dev/mapper/fedora-root xfs 98G 2.8G 96G 3% / tmpfs tmpfs 2.0G 4.0K 2.0G 1% /tmp /dev/sda1 xfs 1014M 248M 767M 25% /boot tmpfs tmpfs 393M 4.0K 393M 1% /run/user/0 
  1. С помощью команды pvs вы можете узнать, как называется ваш физический том. Столбец PFree показывает количество свободного места.
[root@weathered-firefly-vs ~]# pvs PV VG Fmt Attr PSize PFree /dev/sda2 fedora lvm2 a--  
  1. Теперь создайте физический том как основу для вашего LVM. Здесь /dev/sdc1 - это созданный раздел.
[root@weathered-firefly-vs ~]# pvcreate /dev/sdc1 Physical volume "/dev/sdc1" successfully created. [root@weathered-firefly-vs ~]# pvs PV VG Fmt Attr PSize PFree /dev/sda2 fedora lvm2 a--  
  1. С помощью команды vgs вы можете узнать, как называется ваша группа томов. Столбец VFree показывает количество свободного места.
[root@weathered-firefly-vs ~]# vgs VG #PV #LV #SN Attr VSize VFree fedora 2 2 0 wz--n- 98.99g 0 
  1. Затем расширите эту группу томов Fedora , добавив к ней новый физический том с помощью команды vgextend , проверьте, можно ли применить изменения снова с помощью команды vgs .
[root@weathered-firefly-vs ~]# vgextend fedora /dev/sdc1 Volume group "fedora" successfully extended [root@weathered-firefly-vs ~]# vgs VG #PV #LV #SN Attr VSize VFree fedora 3 2 0 wz--n-  
  1. С помощью команды lvs вы можете узнать, как называется ваша группа томов.
[root@weathered-firefly-vs ~]# lvs LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert root fedora -wi-ao---- 97.99g swap fedora -wi-ao---- 1.00g 
  1. Чтобы расширить логический том, выполните команду: lvextend .
[root@weathered-firefly-vs ~]# lvextend -l +100%FREE /dev/mapper/fedora-root Size of logical volume fedora/root changed from 97.99 GiB (25086 extents) to  
  1. Наконец, измените размер файловой системы XFS на логический том с помощью команды xfs_growfs . Если вы используете файловую систему ext4 , используйте утилиту resize2fs .
[root@weathered-firefly-vs ~]# df -hT /dev/mapper/fedora-root Filesystem Type Size Used Avail Use% Mounted on /dev/mapper/fedora-root xfs 98G 2.8G 96G 3% / [root@weathered-firefly-vs ~]# xfs_growfs / meta-data=/dev/mapper/fedora-root isize=512 agcount=15, agsize=1834752 blks = sectsz=512 attr=2, projid32bit=1 = crc=1 finobt=1, sparse=1, rmapbt=0 = reflink=1 data = bsize=4096 blocks=25688064, imaxpct=25 = sunit=0 swidth=0 blks naming =version 2 bsize=4096 ascii-ci=0, ftype=1 log =internal log bsize=4096 blocks=3583, version=2 = sectsz=512 sunit=0 blks, lazy-count=1 realtime =none extsz=4096 blocks=0, rtextents=0 data blocks changed from 25688064 to 38794240 

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

[root@weathered-firefly-vs ~]# df -hT /dev/mapper/fedora-root Filesystem Type Size Used Avail Use% Mounted on /dev/mapper/fedora-root xfs 148G 3.2G 145G 3% / 

#Список команд для расширения ‘корневого’ раздела Ubuntu Server

Подходит для 18.04 LTS и 20.04 LTS

> \# growpart /dev/sda/ 3 > \# pvresize /dev/sda3/ > \# lvextend -l +100%FREE /dev/mapper/ubuntu--vg-ubuntu--lv/ > \# resize2fs /dev/ubuntu-vg/ubuntu-lv/ 

#Список команд для расширения ‘корневого’ раздела Ubuntu Desktop 20.04 LTS

> \# growpart /dev/sda/ 2 > \# growpart /dev/sda/ 5 > \# pvresize /dev/sda5/ > \# lvextend -l +100%FREE /dev/mapper/vgubuntu-root/ > \# resize2fs /dev/vgubuntu/root/ 

#Список команд для расширения ‘корневого’ раздела Ubuntu Desktop 18.04 LTS

> \# growpart /dev/sda/ 1 > \# pvresize /dev/sda1/ > \# lvextend -l +100%FREE /dev/mapper/ubuntu--vg-root/ > \# resize2fs /dev/ubuntu-vg/root/ 

Помогите разобраться с разделом dev/mapper

Доброго времени суток! Помогите понять как в моей системе настроен раздел /dev/mapper/isw_cbhedgfjcb_Volume1. Небольшая предистория: на материнской (Gigabyte z170x Gaming 5) плате есть поддержка RAID. Перед установкой системы я настроил RAID 1 на 2ух дисках HDD по 1Tb (диск идентичные), а саму систему решил поставить на SDD. Загрузился с Live CD, установил систему, но она не загрузилась, пришлось поменять настройки SATA контроллера в BIOS с режима RAID на режим AHCI. После изменения настроек система загрузилась.

fdisk выдает следующее:

tolik@PC:~ > sudo fdisk -l

Диск /dev/sda: 256.1 Гб, 256060514304 байт 255 головок, 63 секторов/треков, 31130 цилиндров, всего 500118192 секторов Units = секторы of 1 * 512 = 512 bytes Размер сектора (логического/физического): 512 байт / 512 байт I/O size (minimum/optimal): 512 bytes / 512 bytes Идентификатор диска: 0x232dcb17

Устр-во Загр Начало Конец Блоки Id Система /dev/sda1 2048 260098047 130048000 83 Linux /dev/sda2 * 260098048 466464767 103183360 7 HPFS/NTFS/exFAT /dev/sda3 466669566 500117503 16723969 5 Расширенный /dev/sda5 466669568 500117503 16723968 82 Linux своп / Solaris

Диск /dev/sdb: 1000.2 Гб, 1000204886016 байт 255 головок, 63 секторов/треков, 121601 цилиндров, всего 1953525168 секторов Units = секторы of 1 * 512 = 512 bytes Размер сектора (логического/физического): 512 байт / 4096 байт I/O size (minimum/optimal): 4096 bytes / 4096 bytes Идентификатор диска: 0x000bd921

Устр-во Загр Начало Конец Блоки Id Система /dev/sdb1 2048 1062715391 531356672 83 Linux /dev/sdb2 1062715392 1952290815 444787712 7 HPFS/NTFS/exFAT

Диск /dev/sdc: 1000.2 Гб, 1000204886016 байт 255 головок, 63 секторов/треков, 121601 цилиндров, всего 1953525168 секторов Units = секторы of 1 * 512 = 512 bytes Размер сектора (логического/физического): 512 байт / 4096 байт I/O size (minimum/optimal): 4096 bytes / 4096 bytes Идентификатор диска: 0x000bd921

Устр-во Загр Начало Конец Блоки Id Система /dev/sdc1 2048 1062715391 531356672 83 Linux /dev/sdc2 1062715392 1952290815 444787712 7 HPFS/NTFS/exFAT

Диск /dev/mapper/isw_cbhedgfjcb_Volume1: 1000.2 Гб, 1000202178560 байт 255 головок, 63 секторов/треков, 121600 цилиндров, всего 1953519880 секторов Units = секторы of 1 * 512 = 512 bytes Размер сектора (логического/физического): 512 байт / 4096 байт I/O size (minimum/optimal): 4096 bytes / 4096 bytes Идентификатор диска: 0x000bd921

Устр-во Загр Начало Конец Блоки Id Система /dev/mapper/isw_cbhedgfjcb_Volume1p1 2048 1062715391 531356672 83 Linux /dev/mapper/isw_cbhedgfjcb_Volume1p2 1062715392 1952290815 444787712 7 HPFS/NTFS/exFAT

Диск /dev/mapper/isw_cbhedgfjcb_Volume1p1: 544.1 Гб, 544109232128 байт 255 головок, 63 секторов/треков, 66150 цилиндров, всего 1062713344 секторов Units = секторы of 1 * 512 = 512 bytes Размер сектора (логического/физического): 512 байт / 4096 байт I/O size (minimum/optimal): 4096 bytes / 4096 bytes Идентификатор диска: 0x00000000

На диске /dev/mapper/isw_cbhedgfjcb_Volume1p1 отсутствует верная таблица разделов

Диск /dev/mapper/isw_cbhedgfjcb_Volume1p2: 455.5 Гб, 455462617088 байт 255 головок, 63 секторов/треков, 55373 цилиндров, всего 889575424 секторов Units = секторы of 1 * 512 = 512 bytes Размер сектора (логического/физического): 512 байт / 4096 байт I/O size (minimum/optimal): 4096 bytes / 4096 bytes Идентификатор диска: 0x2052474d

Это не похоже на таблицу разделов Возможно, вы выбрали неверное устройство.

Устр-во Загр Начало Конец Блоки Id Система /dev/mapper/isw_cbhedgfjcb_Volume1p2p1 ? 6579571 1924427647 958924038+ 70 DiskSecure Multi-Boot Раздел 1 начинается не на границе физического сектора. /dev/mapper/isw_cbhedgfjcb_Volume1p2p2 ? 1953251627 3771827541 909287957+ 43 Неизвестный Раздел 2 начинается не на границе физического сектора. /dev/mapper/isw_cbhedgfjcb_Volume1p2p3 ? 225735265 225735274 5 72 Неизвестный Раздел 3 начинается не на границе физического сектора. /dev/mapper/isw_cbhedgfjcb_Volume1p2p4 2642411520 2642463409 25945 0 Пустой

Пункты таблицы разделов расположены не в дисковом порядке

у меня остались непонятки как все-таки настроен раздел из двух дисков - что это - LVM? или софтовый RAID?

Device-mapper и DM-multipath

В статье про настройку iSCSI LUN на NetApp была затронута тема многоканальности (multipathing). Напомню, что это побочное явления использования нескольких физических каналов между целевым сетевым хранилищем данных (СХД) и сервером-инициатором, свойственное всем блочным протоколам. При наличии нескольких путей до инициатора, презентованный ему LUN (Logical Unit Number) будет виден столько раз, сколько существует путей. Поэтому прибегают к помощи вспомогательных средств для группирования всех этих «фантомных» LUN в единственный. В Windows это делается средствами MPIO, в Linux – демоном multipathd, который является компонентом device-mapper, именно о последних двух и пойдет речь в данной статье.

Device-Mapper

Device-mapper является частью ядра Linux, и основным его назначением является трансляция (mapping) одного блочного устройства в другое. На основе device-mapper строятся такие системы как LVM2, софтовый RAID и др. Device-mapper представляет некое «виртуальное» блочное устройство, и все данные, которые проходят через него, он посылает на другое, уже «реальное» блочное устройство.

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

При ссылке на «реальное» блочное устройство DM может использовать как его имя, отображаемое в файловой системе (/dev/sda), так и старший (major) и младший (minor) номера устройства в формате major:minor.

Общий вид строки в таблице преобразования:

start length type device offset
  • start – начальный блок виртуального устройства
  • length – длина сегмента
  • type – тип преобразования. Бывают: linear, striped (позволяет пробрасывать виртуальное устройство на несколько физических), mirror, snapshot (используется для создания снимка тома диска), error, zero, multipath, crypt
  • device – название физического устройства
  • offset – отступ в физическом устройстве

Пример строки линейного преобразования с 0-го блока виртуального устройства, сегмента длиною 1638400 в физическое устройство со старшим номером 8, младшим номером 2 и отступом на нем в 41146992.

0 16384000 linear 8:2 41156992

В зависимости от типа преобразования в строке могут появляться дополнительные параметры.

При создании снимка тома диска средствами LVM используются четыре устройства Device Mapper:

  1. Устройство с linear-типом, хранящее первоначальную таблицу преобразования тома.
  2. Устройство с linear-типом для использования в качестве Copy-on-Write устройства – перед каждой записью на том, первоначальные данные будут сохраняться на CoW устройстве.
  3. Устройство со snapshot-типом хранящую таблицу преобразования из комбинаций первого и второго устройств и видного, как снимок, тома.
  4. «Первоначальный» том (использующий номер устройства первоначального тома источника) чья таблица преобразования заменяется на «snapshot-mapping» из первого устройства.

Пример создания LVM тома BASE и snapshot-подтома SNAP на этом томе

lvcreate -L 1G -n base volumeGroup lvcreate -L 100M --snapshot -n snap volumeGroup/base

Что в свою очередь создает четыре устройства, которые можно посмотреть

dmsetup table|grep volumeGroup volumeGroup-base-real: 0 2097152 linear 8:19 384 volumeGroup-snap-cow: 0 204800 linear 8:19 2097536 volumeGroup-snap: 0 2097152 snapshot 254:11 254:12 P 16 volumeGroup-base: 0 2097152 snapshot-origin 254:11
ls -lL /dev/mapper/volumeGroup-* brw------- 1 root root 254, 11 29 ago 18:15 /dev/mapper/volumeGroup-base-real brw------- 1 root root 254, 12 29 ago 18:15 /dev/mapper/volumeGroup-snap-cow brw------- 1 root root 254, 13 29 ago 18:15 /dev/mapper/volumeGroup-snap brw------- 1 root root 254, 10 29 ago 18:14 /dev/mapper/volumeGroup-base

Device-Mapper Multipath

Device mapper multipath (DM-Multipath) позволяет сгруппировать несколько путей между сервером и хранилищем (multipathing — многоканальность) в одно устройство.

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

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

Идентификаторы многоканальных устройств

Каждой многоканальное устройство (СХД) имеет т.н. World Wide Identifier (WWID), уникальный глобальный идентификатор. На его основании и делается предположение, о единстве LUN, доступного по множеству путей.

Например, сервер с двумя HBA (адаптер для подключения к FC сети) подключенный через FC свитч к СХД с двумя портами, при презентации ему одного LUN на этой СХД увидит четыре устройства: /dev/sda, /dev/sdb, dev/sdc, and /dev/sdd. DM-Multipath создаст одно «виртуальное» устройство с уникальным WWID.

Создаваемые DM-Multipath «виртуальные» устройства находятся в двух местах:

  • /dev/mapper – каталог, используемый непосредственно для создания логических томов;
  • /dev/dm-n устройства, используемые системой для внутренних нужд.

После создания виртуальных устройств средствами DM-Multipath можно приступить к созданию физических томов LVM (Physical volume LVM). Стоить отметить, что использование LVM необязательно и можно форматировать виртуальные устройства fdisk’ом, но это крайне не рекомендуется, т.к. внесет еще большую сумятицу.

RedHat отмечает, что для создания физических томов LVM на диске не должно быть разделов.
При создании логических томов LVM (Logical volume LVM) на СХД, подключенных несколькими путями по схеме активный/пассивный необходимо отредактировать файл настроек LVM (/etc/lvm.conf) для исключения дисков на которые ссылаются «виртуальные» устройства, созданные DM-Pathing. Чтобы это сделать, достаточно внести фильтр все SCSI устройств в файл lvm.conf:

filter = [ "r/block/", "r/disk/", "r/sd.*/", "a/.*/" ]

Компоненты DM-Multipath

  • dm_multipath – модуль ядра
  • mpathconf – утилита для настройки многоканальности
  • multipath – утилита для отображения и настройки многоканальных устройств
  • multipathd – демон, следящий за доступностью путей
  • kpartx – утилита создает «виртуальные» устройства для DOS-разделов

Процесс подготовки DM-Multipath на RedHat/CentOS

  1. Установка device-mapper-multipath пакета.
  2. Изменение настроек по умолчанию в файле /etc/multipath.conf на необходимые. По умолчанию DM-Multipath включает в себя настройки для большинства СХД таким образом, что при его работе виртуальные устройства будут называться опознаваемо.
  3. Запуск демона multipathd

Установка и настройка Device Mapper Multipath для NetApp

  1. Проверяем наличие установленных пакетов DM и DM-Multipath
rpm -q device-mapper rpm -q device-mapper-multipath
  • blacklist – список игнорируемых устройств (по wwid и/или по имени устройства (devnode))
  • blacklist_exceptions – список исключений из списка игнора
  • defaults – общие настройки
  • multipaths – список устройств с особыми настройками (имеет приоритет над defaults и devices)
  • devices – настройки отдельных СХД с подсекциями для каждой из них (имеет приоритет над defaults)

Примеры multipath.conf для NetApp и RedHat различных версий

  • RedHat 6 with ALUA
    defaults user_friendly_names no
    max_fds max
    flush_on_last_del yes
    queue_without_daemon no
    >
    blacklist devnode "^hd[a-z]"
    devnode "^(ram|raw|loop|fd|md|dm-|sr|scd|st)[0-9]*"
    devnode "^cciss.*"
    >
    devices device vendor "NETAPP"
    product "LUN"
    path_grouping_policy group_by_prio
    features "1 queue_if_no_path"
    prio "alua"
    path_checker directio
    failback immediate
    path_selector "round-robin 0"
    hardware_handler "1 alua"
    rr_weight uniform
    rr_min_io 128
    getuid_callout "/lib/udev/scsi_id -g -u -d /dev/%n"
    >
    >
  • RedHat 5 Update 7 with ALUA
    defaults user_friendly_names no
    queue_without_daemon no
    flush_on_last_del yes
    max_fds max
    pg_prio_calc avg
    >
    blacklist devnode "^hd[a-z]"
    devnode "^(ram|raw|loop|fd|md|dm-|sr|scd|st)[0-9]*"
    devnode "^cciss.*"
    >
    devices device vendor "NETAPP"
    product "LUN"
    path_grouping_policy group_by_prio
    features "1 queue_if_no_path"
    prio_callout "/sbin/mpath_prio_alua /dev/%n"
    path_checker directio
    path_selector "round-robin 0"
    failback immediate
    hardware_handler "1 alua"
    rr_weight uniform
    rr_min_io 128
    getuid_callout "/sbin/scsi_id -g -u -s /block/%n"
    >
    >
  • RedHat 5 Update 7 without ALUA
    defaults user_friendly_names no
    queue_without_daemon no
    flush_on_last_del yes
    max_fds max
    pg_prio_calc avg
    >
    blacklist devnode "^hd[a-z]"
    devnode "^(ram|raw|loop|fd|md|dm-|sr|scd|st)[0-9]*"
    devnode "^cciss.*"
    >
    devices device vendor "NETAPP"
    product "LUN"
    path_grouping_policy group_by_prio
    features "1 queue_if_no_path"
    prio_callout "/sbin/mpath_prio_ontap /dev/%n"
    path_checker directio
    path_selector "round-robin 0"
    failback immediate
    hardware_handler "0"
    rr_weight uniform
    rr_min_io 128
    getuid_callout "/sbin/scsi_id -g -u -s /block/%n"
    >
    >

Примечания к файлу multipath.conf:
В NetApp ALUA используется: для Cluster-Mode на протоколах FC, FCoE и iSCSI, для 7-Mode на протоколах FC и FCoE.
Соответственно, в зависимости от того, поддерживается ли ALUA, устанавливаем (на RedHat 6)

Параметр Значение
prio «alua» если поддерживается
prio «ontap» если не поддерживается
modprobe dm-multipath
/etc/init.d/multipathd start
multipath -v2

Параметры для утилиты multipath

Параметр Значение
-v2 уровень многословности равный двум
-ll отобразить параметры multipath собранные со всех уголков системы
-f

удалить указанное многоканальное устройство
-F удалить все неиспользуемые многоканальные устройства
cat /sys/block/sdX/device/vendor
cat /sys/block/sdX/device/model
dmsetup ls --target=multipath
multipath -ll

pvcreate /dev/mapper/
vgcreate VG01 /dev/mapper/

lvcreate -L 25G -n LV01 VG01
mkfs.ext3 /dev/VG01/LV01

Dev mapper что это

Перевод: Сгибнев Михаил

Linux Logical Volume Manager (LVM) является механизмом виртуализации дисков. Он позволяет создавать "виртуальные" дисковые разделы на одном или нескольких жестких дисках, которые в дальнейшем можно увеличивать, уменьшать или перемещать с диска на диск сообразно вашим потребностям. Также появляется возможность преодолеть ограничение на размер раздела, накладываемое размером жесткого диска.

Традиционной областью использования LVM являются серверы баз данных и файловые серверы, но даже домашние пользователи могут захотеть использовать его для хранения музыкальных или видео архивов, а также для хранения резервных копий. LVM и RAID 1 также могут быть удобными способами получить избыточность, не жертвуя гибкостью.

В этой статье сперва рассматриается файловый сервер начального уровня, затем внесем некоторые изменения, добавив избыточность с помощью RAID 1. Также рассмотрим аспекты применения LVM для домашних пользователей.

Установка LVM

Система LVM включает в себя компонет ядра, овечающий за файловую систему и пользовательские утилиты. Для включения компонента ядра, установите следущие опции:

 Device Drivers --> Multi-device support (RAID and LVM) [*] Multiple devices driver support (RAID and LVM) < >RAID support Device mapper support < >Crypt target support (NEW) 

Основы LVM

Чтобы использовать LVM, вам необходимо понять несколько моментов. Вот есть у вас жесткие диски. Дисковое пространство на этих устройствах нарублено на разделы. Наконец, файловая система записывается поверх этих разделов. Для сравнения, в LVM, Volume Groups (VGs) разделены на логические тома (LVs), где файловые системы, в конечном счете, и находятся (Рис. 1).

Каждый VG составлен из пула Физических Томов (PVs). Вы можете расширить (или уменьшить), размер Volume Groups добавляя или удаляя так много PVs, как вам будет угодно, если есть достаточное количество PVs для хранения содержимого всех выделенных LVs. Пока есть доступное пространство в VG, вы можете увеличивать или сокращать размер ваших логических томов (хотя большинство файловых систем не любит сжиматься).

Пример: простой файловой сервер

Простой пример использования LVM - традиционный файловый сервер, на котором храняться резервные копии, медиа-файлы и общие файлы для компьютеров нескольких членов семьи. Гибкость - ключевое требование; кто знает, какие требования к объемам дисков принесет селдующий год?

Для примера, предъявим следущие требования к разделам:

 400G - Large media file storage 50G - Online backups of two laptops and three desktops (10G each) 10G - Shared files 
Диски

Традиционно, файловый сервер использует диски SCSI, но сегодня диски SATA предлагают привлекательное соотношение скорости и низкой цены. На момент написания этой статьи, диски SATA на 250 Гбайт по стоимости примерно равны 100 $, таким образом, стоимость одного терабайта составит около 400 $.

Диски SATA именуются не ATA классификацией (hda, hdb), а SCSI (sda, sdb). Как только наша система загрузилась с поддержкой SATA, у нас появится четыре готовых к работе физических устройства:

 /dev/sda 251.0 GB /dev/sdb 251.0 GB /dev/sdc 251.0 GB /dev/sdd 251.0 GB 
 # fdisk -l /dev/sdd Disk /dev/sdd: 251.0 GB, 251000193024 bytes 255 heads, 63 sectors/track, 30515 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes Device Start End Blocks Id System /dev/sdd1 1 30515 245111706 8e Linux LVM 
Создание виртуального тома

Иниицилизируйте каждый диск с помощью команды "pvcreate" :

 # pvcreate /dev/sda /dev/sdb /dev/sdc /dev/sdd 
 # vgcreate datavg /dev/sda1 /dev/sdb1 /dev/sdc1 /dev/sdd1 
 # lvcreate --name medialv --size 400G # lvcreate --name backuplv --size 50G # lvcreate --name sharelv --size 10G 

Теперь у вас есть несколько понятно названных логических томов:

 /dev/datavg/backuplv (also /dev/mapper/datavg-backuplv) /dev/datavg/medialv (also /dev/mapper/datavg-medialv) /dev/datavg/sharelv (also /dev/mapper/datavg-sharelv) 

Выбор файловой системы

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

Типичными файловыми системами настольных компьютеров является ext2 и ext3. Ext2 была стандартной, надежной рабочей лошадью для Linux в минувшие годы. Ext3 - модернизация ext2, поддерживающая журналирование и улучшенные механизмы проверки после сбоя. Сбалансированность ext3 в плане производительности, надежности и скорости восстановления делает ее прекрасным выбором для систем общего назначения. Поскольку ext2 и ext3 были файловыми системами, используемыми по умолчанию, в течение долгого времени, то ext3 будет хорошим выбором, если вы хотите получить большую надежность. Для того, чтобы хранить резервные копии, надежность намного более важна чем скорость. Главным недостатком ext2/ext3 является то, что для того, чтобы увеличить(уменьшить) ФС, необходимо ее отмонтировать.

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

Для большого количества маленьких файлов превосходным выбором будет ReiserFS. Для потокового, некэшируемого ввода/вывода, эта ФС занимает верхние строки тестов и может быть на несколько порядков быстрее, чем ext3. Однако, исторически, она оказалась не столь стабильной, как ext3. Этот вывод сделан на основании достаточно устаревших данных, возможно, сейчас ситуация изменилась, но неприятный осадок остался.

Если вы планируете создать файловый сервер, который будет содержать большие файлы, типа видео файлов, скачанных с MythTV, приоритетной может стать скорость удаления файлов. С ext3 или ReiserFS, удаление большого файла может занять несколько секунд, чтобы отметить все освобожденные блоки данных. Если ваша система в этот момент делает запись на диск или обрабатывает видео, эта задержка могла бы вызвать сбои. JFS и XFS лучший выбор в этой ситуации, хотя XFS имеет преимущество из-за большей надежности и общей лучшей работы.

Итак, приняв все сказанное во внимание:

 # mkfs.ext3 /dev/datavg/backuplv # mkfs.xfs /dev/datavg/medialv # mkfs.reiserfs /dev/datavg/sharelv 
Монтирование

Наконец, чтобы примонтировать файловые системы, добавьте следующие строки к /etc/fstab:

 /dev/datavg/backuplv /var/backup ext3 rw,noatime 0 0 /dev/datavg/medialv /var/media xfs rw,noatime 0 0 /dev/datavg/sharelv /var/share reiserfs rw,noatime 0 0 
 # mkdir /var/media /var/backup /var/share # mount /var/media /var/backup /var/share 

Добавляем избыточность с помощью RAID

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

Для компенсации такого риска необходимо добавить избыточность, используя RAID 1. RAID (Redundant Array of Independent Disks) является низкоуровневой технологией комбинирования дисков различными способами (уровнями). RAID 1 зеркалирует данные на двух (или более) дисках. Помимо повышения надежности, с использованием RAID 1 возрастает производительность, поскольку на дисках содержатся идентичные данные и операции чтения/записи могут быть разделены между ними.

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

RAID 5, с четырмя дисками, совсем другой коленкор. Он позволяет восстанавливать часть дискового пространства, но добавляет сложности в использовании. Кроме того, показывая неплохую производительность на операциях чтения, этот тип сильно проигрывает на операциях записи. Поскольку диски сейчас довольно дешевы, не стоит мучится ради выгод, даваемых RAID 5.

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

Сейчас мы объединим четыре диска в две пары RAID 1: /dev/sda + /dev/sdd and /dev/sdb + /dev/sdc. Причина для такого специфического объединения заключается в том, что sda и sdd являются первым и вторым дисками на разных контроллерах; поэтому, в случае отказа контроллера, вы сможете обращаться к двум дискам на оставшемся контроллере. При использовании таких пар относительные скорости доступа балансированы так, что ни один тип RAID не медленнее, чем другой. Возможно так же повышение производительности от распределения операций чтения/записи между двумя контроллерами.

Сначала, выведите два диска SATA (sdb и sdd) из datavg VG:

 # modprobe dm-mirror # pvmove /dev/sdb1 /dev/sda1 # pvmove /dev/sdd1 /dev/sdc1 # vgreduce datavg /dev/sdb1 /dev/sdd1 # pvremove /dev/sdb1 /dev/sdd1 
 Device Boot Start End Blocks Id System /dev/sdb1 1 30515 245111706 fd Linux raid autodetect 
 # mdadm --create /dev/md0 -a -l 1 -n 2 /dev/sdd1 missing # mdadm --create /dev/md1 -a -l 1 -n 2 /dev/sdb1 missing 
 # pvcreate /dev/md0 /dev/md1 # vgextend datavg /dev/md0 /dev/md1 
 # pvmove /dev/sda1 /dev/md0 # pvmove /dev/sdc1 /dev/md1 # vgreduce datavg /dev/sda1 /dev/sdc1 # pvremove /dev/sda1 /dev/sdc1 
 # fdisk /dev/sda1 # fdisk /dev/sdc1 # mdadm --manage /dev/md0 --add /dev/sda1 # mdadm --manage /dev/md1 --add /dev/sdc1 

Доступ к файлам по сети

Польза файлового сервера сомнительна, если вы не можете легко получить доступ к файлам. Есть много способов сделать это, но наиболее распространенным является Сетевая Файловая система (NFS). NFS позволяет другим *nix машинам монтировать общие ресурсы для прямого использования, к тому же, она очень легко конфигурируется в Linux.

Сперва убедитесь, что на вашем файловом сервере в ядре разрешен NFS (в данном примере 2.6.15):

 File systems Network File Systems NFS file system support [*] Provide NFSv3 client support NFS server support [*] Provide NFSv3 server support 

Запускаем сервер NFS. Для этого, в вашем дистрибутиве Linux имеется система init. Например, в Gentoo, вы увидите:

 /etc/init.d/nfs start * Starting portmap . [ ok ] * Mounting RPC pipefs . [ ok ] * Starting NFS statd . [ ok ] * Starting NFS daemon . [ ok ] * Starting NFS mountd . [ ok ] 
 program vers proto port service 100003 2 udp 2049 nfs 100003 3 udp 2049 nfs 100003 2 tcp 2049 nfs 100003 3 tcp 2049 nfs 
 /var/backup 192.168.0.0/24(rw,sync) /var/media 192.168.0.0/24(rw,sync) /var/share 192.168.0.0/24(rw,sync) 

Эхпортируем эти NFS ресурсы:

 # exportfs -av exporting 192.168.0.0/24:/var/backup exporting 192.168.0.0/24:/var/media exporting 192.168.0.0/24:/var/share 
 # Device mountpoint fs-type options dump fsckorder fileserv:/var/backup /var/backup nfs defaults 0 0 fileserv:/var/media /var/media nfs defaults 0 0 fileserv:/var/share /var/share nfs defaults 0 0 
 # mkdir /var/backup /var/media /var/share # mount /var/backup /var/media /var/share 

Стратегия создания резервных файлов

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

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

rsync - мощная утилита для того, чтобы копировать файлы с одной системы на другую и она достаточно хорошо работает через Интернет. Вы можете установить дублирующую систему в фирме друга в другом городе и периодически послать резервные копии туда. Это можно сделать с помощью cronjob:

 04 4 * * 4 rsync --delete -a /var/backup/ fileserv.myfriend.org:/backup/myself/backup \ > /var/log/crontab.backup.log 2>&1 

Расширение и перераспределение

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

 # lvextend -L15G /dev/datavg/sharelv # resize_reiserfs /dev/datavg/sharelv 

В случае использования RAID 1, миграция является довольно простым процессом. Для того, что бы пометить диск каждого зеркала как "битый", а затем удалить его, используйте команду mdadm:

 # mdadm --manage /dev/md0 --fail /dev/sda1 # mdadm --manage /dev/md0 --remove /dev/sda1 # mdadm --manage /dev/md0 --fail /dev/sdc1 # mdadm --manage /dev/md0 --remove /dev/sdc1 
 # fdisk /dev/sda # fdisk /dev/sdc # mdadm --manage /dev/md0 --add /dev/sda1 # mdadm --manage /dev/md1 --add /dev/sdc1 
 # mdadm --create /dev/md2 -a -l 1 -n 2 /dev/sda2 /dev/sdd2 # mdadm --create /dev/md3 -a -l 1 -n 2 /dev/sdb2 /dev/sdc2 
 # pvcreate /dev/md2 /dev/md3 # vgextend datavg /dev/md2 /dev/md3 

LVM и рабочая станция

Пока мы говорили об использовании LVM и RAID для управления дисковым пространством файлового сервера, но что если вы хотите установить LVM на своей рабочей машине? Это можно сделать, но стоит принять во внимание несколько аспектов.

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

Во вторых, наличие корневой файловой системы на LVM может усложнить восстановление поврежденных файловых систем. Поскольку загрузчики не поддерживают LVM, раздел /boot должен быть не LVM (хотя может быть на устройстве RAID 1).

В третьих, вам необходимо свободное дисковое пространство для нового раздела LVM. Если такового у вас нет, то попробуйте обрезать корневой раздел, как описано в LVM HOWTO.

В этом примере мы рассмотрим ситуацию, когда у вас есть swap и /boot на собственных разделах, вне LVM. Мы заострим внимание на том, как перенести корневой раздел внутрь LVM раздела /dev/hda4. Проверьте, что тип файловой системы на hda4 - LVM (тип 8e).

Инициализируйте LVM и создайте новый физический том:

 # vgscan # pvcreate /dev/hda4 # vgcreate rootvg /dev/hda4 
 # lvcreate rootvg ---name rootlv -size 5G # mkfs.xfs /dev/rootvg/rootlv 
 # mkdir /mnt/new_root # mount /dev/rootvg/rootlv /mnt/new_root # cp -ax /. /mnt/new_root/ 

Самая хитрая часть заключается в пересборке initrd для включения поддержки LVM. Этот процесс очень сильно зависит от дистрибутива, например mkinitrd или yaird. Ваш образ initrd должен загрузить модуль LVM, в противном случае корневая файловая система будет недоступна. На всякий случай, сохраните образ initrd и новый сделайте с другим именем, например /boot/initrd-lvm.img.

В заключение, обновите bootloader. Добавьте новый раздел для новой корневой файловой системы, продублировав старую строку загрузки. В новой строке измените root с /dev/hda3 на /dev/rootvg/rootlv и замените initrd на новый. Если вы используете lilo, убедитесь, что запустили lilo, как только сделали изменения. Например, с grub мы будем иметь:

 title=Linux root (hd0,0) kernel /vmlinuz root=/dev/hda3 ro single initrd /initrd.img 
 title=LinuxLVM root (hd0,0) kernel /vmlinuz root=/dev/rootvg/root ro single initrd /initrd-lvm.img 

Заключение

LVM является одной из многих технологий Linux, доступной пользователям. LVM позволяет достич большей гибкости в управлении дисковым пространством и объединенная с RAID 1, NFS и хорошей стратегией бэкапа пожет дать пуленепробиваемый, легко управляемый способ хранить и совместно использовать любое количество файлов.

Обсуждение [ RSS ]

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *