Форум по операционной системе GNU/Linux и свободному программному обеспечению
Текущее время: 24 апр 2019, 06:54

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 10 ] 
Автор Сообщение
 Заголовок сообщения: Device mapper
Непрочитанное сообщениеДобавлено: 22 июн 2018, 14:18 
Не в сети
Писатель
Аватара пользователя

Зарегистрирован: 24 сен 2011, 14:22
Сообщения: 11699
Откуда: Харьков
Интересная ссылка - освещает ряд деталей ... (свежая - 15 октября 2017, хотя и использование device mapper активно началось, по существу, года только с 2013-го):
https://ru.wikipedia.org/wiki/Device_mapper
Цитата:
Device mapper (dm) — подсистема (модуль) ядра Linux, позволяющая создавать виртуальные блочные устройства (ВБУ).


Для поэкспериментировать и поизучать:
Код:
[olej@dell /]$ sudo dmsetup ls
cryptswap1      (253:0)

[olej@dell /]$ ls /dev/mapper/
control  cryptswap1

И, конечно:
Код:
$ dmsetup --help
...

Там множество интересного для изучения. ;D


Вернуться к началу
 Профиль Отправить личное сообщение Отправить email  
 
 Заголовок сообщения: Re: Device mapper
Непрочитанное сообщениеДобавлено: 22 июн 2018, 14:25 
Не в сети
Писатель
Аватара пользователя

Зарегистрирован: 24 сен 2011, 14:22
Сообщения: 11699
Откуда: Харьков
Olej писал(а):
Интересная ссылка - освещает ряд деталей ... (свежая - 15 октября 2017, хотя и использование device mapper активно началось, по существу, года только с 2013-го):
https://ru.wikipedia.org/wiki/Device_mapper
Цитата:
Device mapper (dm) — подсистема (модуль) ядра Linux, позволяющая создавать виртуальные блочные устройства (ВБУ).


Цитата:
Возможности device mapper используются в следующих проектах:
...
kpartx — утилита, вызываемая hotplug, для создания и удаления таблиц разделов БУ;

Очень полезные игры с kpartx уже обсуждались детально здесь: образы и карточки - относительно файлов образов .img для создания загрузочных SD карт для одноплатных микрокомпьютеров (SBC).


Вернуться к началу
 Профиль Отправить личное сообщение Отправить email  
 
 Заголовок сообщения: Re: Device mapper
Непрочитанное сообщениеДобавлено: 22 июн 2018, 15:16 
Не в сети
Писатель
Аватара пользователя

Зарегистрирован: 24 сен 2011, 14:22
Сообщения: 11699
Откуда: Харьков
Olej писал(а):
Цитата:
Возможности device mapper используются в следующих проектах:
...
kpartx — утилита, вызываемая hotplug, для создания и удаления таблиц разделов БУ;

Очень полезные игры с kpartx уже обсуждались детально здесь: образы и карточки - относительно файлов образов .img для создания загрузочных SD карт для одноплатных микрокомпьютеров (SBC).

Делаю вот такой фиктивный-виртуальный диск...
Код:
[olej@xenix dm]$ time dd if=/dev/zero of=./vbu bs=10M count=50
50+0 записей получено
50+0 записей отправлено
524288000 байт (524 MB, 500 MiB) скопирован, 0,586872 s, 893 MB/s

real   0m0,589s
user   0m0,000s
sys   0m0,584s

[olej@xenix dm]$ ls -l
итого 512000
-rw-rw-r-- 1 olej olej 524288000 июн 22 14:31 vbu

Пока это просто тупая заготовка - файл на 500Mb.
Теперь из этого куска байтов делаем виртуальный диск:
Код:
[olej@xenix dm]$ kpartx -a -v ./vbu
/dev/mapper/control: open failed: Permission denied
Failure to communicate with kernel device-mapper driver.
Incompatible libdevmapper 1.02.144 (2017-10-06) and kernel driver (unknown version).
device mapper prerequisites not met

[olej@xenix dm]$ sudo kpartx -a -v ./vbu
[sudo] пароль для olej:
add map loop0p1 (253:0): 0 1023997 linear 7:0 3

[olej@xenix dm]$ ls -l /dev/mapper
итого 0
crw------- 1 root root 10, 236 июн 22 13:28 control
lrwxrwxrwx 1 root root       7 июн 22 14:37 loop0p1 -> ../dm-0

[olej@xenix dev]$ ls -l /dev/dm*
brw-rw---- 1 root disk 253, 0 июн 22 14:37 /dev/dm-0

Понятно, что kpartx нужен root для работы с /dev...
Но пока это бездарный кусок байт.


Вернуться к началу
 Профиль Отправить личное сообщение Отправить email  
 
 Заголовок сообщения: Re: Device mapper
Непрочитанное сообщениеДобавлено: 22 июн 2018, 15:22 
Не в сети
Писатель
Аватара пользователя

Зарегистрирован: 24 сен 2011, 14:22
Сообщения: 11699
Откуда: Харьков
Olej писал(а):
Но пока это бездарный кусок байт.

Теперь нанесём на него (разметим) структуру разделов:
Код:
[olej@xenix dev]$ sudo fdisk /dev/dm-0

Добро пожаловать в fdisk (util-linux 2.30.2).
Изменения останутся только в памяти до тех пор, пока вы не решите записать их.
Будьте внимательны, используя команду write.

Устройство не содержит стандартной таблицы разделов.
Создана новая метка DOS с идентификатором 0x4d865227.

Команда (m для справки): p
Диск /dev/dm-0: 500 MiB, 524286464 байт, 1023997 секторов
Единицы: секторов по 1 * 512 = 512 байт
Размер сектора (логический/физический): 512 байт / 512 байт
Размер I/O (минимальный/оптимальный): 512 байт / 512 байт
Тип метки диска: dos
Идентификатор диска: 0x4d865227

Команда (m для справки): n
Тип раздела
   p   основной (0 первичный, 0 расширеный, 4 свободно)
   e   расширенный (контейнер для логических разделов)
Выберите (по умолчанию - p):

Используется ответ по умолчанию p
Номер раздела (1-4, default 1):
Первый сектор (2048-1023996, default 2048):
Последний сектор + число секторов или + размер{K,M,G,T,P} (2048-1023996, default 1023996):

Создан новый раздел 1 с типом 'Linux' и размером 499 MiB.

Команда (m для справки): a
Выбранный раздел 1
Флаг загрузки раздела 1 включен.

Команда (m для справки): p
Диск /dev/dm-0: 500 MiB, 524286464 байт, 1023997 секторов
Единицы: секторов по 1 * 512 = 512 байт
Размер сектора (логический/физический): 512 байт / 512 байт
Размер I/O (минимальный/оптимальный): 512 байт / 512 байт
Тип метки диска: dos
Идентификатор диска: 0x4d865227

Устр-во                   Загрузочный начало   Конец Секторы Размер Идентификатор Тип
/dev/mapper/loop0p1-part1 *             2048 1023996 1021949   499M            83 Linux

Команда (m для справки): w
Таблица разделов была изменена.
Вызывается ioctl() для перечитывания таблицы разделов.
Перечитывание таблицы разделов не удалось.: Недопустимый аргумент

Ядро все еще использует старую таблицу. Новая таблица будет использована при следующей перезагрузке или при запуске partprobe(8) или kpartx(8).

Что-то он там ругнулся на ioctl() ... но "про себя" :lol: , для нас это не влечёт последствий:
Код:
[olej@xenix dev]$ sudo fdisk -l /dev/dm-0
Диск /dev/dm-0: 500 MiB, 524286464 байт, 1023997 секторов
Единицы: секторов по 1 * 512 = 512 байт
Размер сектора (логический/физический): 512 байт / 512 байт
Размер I/O (минимальный/оптимальный): 512 байт / 512 байт
Тип метки диска: dos
Идентификатор диска: 0x4d865227

Устр-во                   Загрузочный начало   Конец Секторы Размер Идентификатор Тип
/dev/mapper/loop0p1-part1 *             2048 1023996 1021949   499M            83 Linux
[code]
И для убедительности (чтобы по-новой не подключать его kpartx, что было бы как-раз совершенно правильно):
[/code]
[olej@xenix dev]$ sudo partprobe /dev/dm-0

[olej@xenix dev]$ echo $?
0

Теперь у нас есть структура разделов:
Код:
[olej@xenix dev]$ ls -l /dev/mapper/*
crw------- 1 root root 10, 236 июн 22 13:28 /dev/mapper/control
lrwxrwxrwx 1 root root       7 июн 22 14:43 /dev/mapper/loop0p1 -> ../dm-0
lrwxrwxrwx 1 root root       7 июн 22 14:43 /dev/mapper/loop0p1p1 -> ../dm-1


Вернуться к началу
 Профиль Отправить личное сообщение Отправить email  
 
 Заголовок сообщения: Re: Device mapper
Непрочитанное сообщениеДобавлено: 22 июн 2018, 15:24 
Не в сети
Писатель
Аватара пользователя

Зарегистрирован: 24 сен 2011, 14:22
Сообщения: 11699
Откуда: Харьков
Olej писал(а):
Olej писал(а):
Теперь у нас есть структура разделов:
Код:
[olej@xenix dev]$ ls -l /dev/mapper/*
crw------- 1 root root 10, 236 июн 22 13:28 /dev/mapper/control
lrwxrwxrwx 1 root root       7 июн 22 14:43 /dev/mapper/loop0p1 -> ../dm-0
lrwxrwxrwx 1 root root       7 июн 22 14:43 /dev/mapper/loop0p1p1 -> ../dm-1

Теперь на полученный раздел (который у нас значится ещё и загрузочным :lol: ) размечаем файловую систему (любую!) ... форматируем:
Код:
[olej@xenix dev]$ sudo mkfs.ext2 /dev/dm-1
mke2fs 1.43.5 (04-Aug-2017)
Discarding device blocks: done                           
Creating filesystem with 510972 1k blocks and 128016 inodes
Filesystem UUID: 8b7ececd-a193-45f7-87d4-1e760496ee25
Superblock backups stored on blocks:
    8193, 24577, 40961, 57345, 73729, 204801, 221185, 401409

Allocating group tables: done                           
Writing inode tables: done                           
Writing superblocks and filesystem accounting information: done


Вернуться к началу
 Профиль Отправить личное сообщение Отправить email  
 
 Заголовок сообщения: Re: Device mapper
Непрочитанное сообщениеДобавлено: 22 июн 2018, 15:29 
Не в сети
Писатель
Аватара пользователя

Зарегистрирован: 24 сен 2011, 14:22
Сообщения: 11699
Откуда: Харьков
Olej писал(а):
Теперь на полученный раздел (который у нас значится ещё и загрузочным :lol: ) размечаем файловую систему (любую!) ... форматируем:
Код:
[olej@xenix dev]$ sudo mkfs.ext2 /dev/dm-1
mke2fs 1.43.5 (04-Aug-2017)
Discarding device blocks: done                           
Creating filesystem with 510972 1k blocks and 128016 inodes
Filesystem UUID: 8b7ececd-a193-45f7-87d4-1e760496ee25
Superblock backups stored on blocks:
    8193, 24577, 40961, 57345, 73729, 204801, 221185, 401409

Allocating group tables: done                           
Writing inode tables: done                           
Writing superblocks and filesystem accounting information: done

И монтируем теперь этот лже-диск в корневую файловую систему:
Код:
[olej@xenix dev]$ sudo mkdir /mnt/vbu

[olej@xenix dev]$ sudo mount /dev/dm-1 /mnt/vbu/

[olej@xenix dev]$ ls -l /mnt/vbu
итого 12
drwx------ 2 root root 12288 июн 22 14:48 lost+found

Смотрим где он и как там в файловой системе пристроился:
Код:
[olej@xenix dev]$ df
Файловая система      1K-блоков Использовано Доступно Использовано% Cмонтировано в
devtmpfs                4036752            0  4036752            0% /dev
tmpfs                   4049716        85384  3964332            3% /dev/shm
tmpfs                   4049716         1264  4048452            1% /run
tmpfs                   4049716            0  4049716            0% /sys/fs/cgroup
/dev/sdb2             156033024    134825560 20487000           87% /
tmpfs                   4049716            8  4049708            1% /tmp
/dev/sdb1                243815       189211    37708           84% /boot
tmpfs                    809940           36   809904            1% /run/user/1000
/dev/mapper/loop0p1p1    494816         2318   466950            1% /mnt/vbu

[olej@xenix dev]$ df | grep vbu
/dev/mapper/loop0p1p1    494816         2318   466950            1% /mnt/vbu

[olej@xenix dev]$ mount | grep vbu
/dev/mapper/loop0p1p1 on /mnt/vbu type ext2 (rw,relatime,block_validity,barrier,user_xattr,acl)

Всё! У нас появилось полноценное дисковое устройство - с major номером 253 и minor номерами 0,1 и т.д.:
Код:
[olej@xenix vbu]$ ls -l /dev/dm*
brw-rw---- 1 root disk 253, 0 июн 22 14:43 /dev/dm-0
brw-rw---- 1 root disk 253, 1 июн 22 14:48 /dev/dm-1

И даже специализирванная тестовая утилита для проверки дисковых носителей не отличает его от "железного" диска:
Код:
[olej@xenix vbu]$ sudo hdparm -tT /dev/dm-0
[sudo] пароль для olej:

/dev/dm-0:
 Timing cached reads:   10378 MB in  1.99 seconds = 5205.99 MB/sec
 Timing buffered disk reads: 498 MB in  1.26 seconds = 396.09 MB/sec


Вернуться к началу
 Профиль Отправить личное сообщение Отправить email  
 
 Заголовок сообщения: Re: Device mapper
Непрочитанное сообщениеДобавлено: 22 июн 2018, 15:32 
Не в сети
Писатель
Аватара пользователя

Зарегистрирован: 24 сен 2011, 14:22
Сообщения: 11699
Откуда: Харьков
Olej писал(а):
Всё! У нас появилось полноценное дисковое устройство - с major номером 253 и minor номерами 0,1 и т.д.:
Код:
[olej@xenix vbu]$ ls -l /dev/dm*
brw-rw---- 1 root disk 253, 0 июн 22 14:43 /dev/dm-0
brw-rw---- 1 root disk 253, 1 июн 22 14:48 /dev/dm-1


Захожу на смонтированный диск и проверяю его "полноценность" файловыми операциями ... например так:
Код:
[olej@xenix vbu]$ cd /mnt/vbu

[olej@xenix vbu]$ echo 12345 > test.file.txt
bash: test.file.txt: Отказано в доступе

[olej@xenix vbu]$ sudo chmod a+rwx /mnt/vbu
[sudo] пароль для olej:

[olej@xenix vbu]$ echo 12345 > test.file.txt

[olej@xenix vbu]$ cat test.file.txt
12345

[olej@xenix vbu]$ ls -l
итого 13
drwx------ 2 root root 12288 июн 22 14:48 lost+found
-rw-rw-r-- 1 olej olej     6 июн 22 15:00 test.file.txt


Вернуться к началу
 Профиль Отправить личное сообщение Отправить email  
 
 Заголовок сообщения: Re: Device mapper
Непрочитанное сообщениеДобавлено: 22 июн 2018, 17:39 
Не в сети
Писатель
Аватара пользователя

Зарегистрирован: 24 сен 2011, 14:22
Сообщения: 11699
Откуда: Харьков
Olej писал(а):
Захожу на смонтированный диск и проверяю его "полноценность" файловыми операциями ... например так:

А теперь обратным порядком...
- размонтировали:
Код:
[olej@xenix mnt]$ sudo umount /mnt/vbu

[olej@xenix mnt]$ mount | grep vbu

- убрали отображение виртуального диска:
Код:
[olej@xenix dm]$ sudo kpartx -d -vvv /dev/dm-0
del devmap : loop0p1p1

Это должно бы полностью уничтожить диск ... но удалилось только отображение раздела:
Код:
[olej@xenix dm]$ ls -l /dev/dm*
brw-rw---- 1 root disk 253, 0 июн 22 14:43 /dev/dm-0

... но с этим я разберусь позже...


Вернуться к началу
 Профиль Отправить личное сообщение Отправить email  
 
 Заголовок сообщения: Re: Device mapper
Непрочитанное сообщениеДобавлено: 22 июн 2018, 17:43 
Не в сети
Писатель
Аватара пользователя

Зарегистрирован: 24 сен 2011, 14:22
Сообщения: 11699
Откуда: Харьков
Olej писал(а):
... но с этим я разберусь позже...

Смысл этих нудных экспериментов с kpartx в том, что (это имеет отношение к разговору о драйверах блочных устройств) блочное устройство Linux ничем не отличается от неразмеченной последовательности байт, на которую а). затем наложена структура разделов (MBR, GPT) и б). форматирование этих разделов под требуемые типы файловых систем.


Вернуться к началу
 Профиль Отправить личное сообщение Отправить email  
 
 Заголовок сообщения: Re: Device mapper
Непрочитанное сообщениеДобавлено: 22 июн 2018, 17:47 
Не в сети
Писатель
Аватара пользователя

Зарегистрирован: 24 сен 2011, 14:22
Сообщения: 11699
Откуда: Харьков
Olej писал(а):
Смысл этих нудных экспериментов с kpartx

Всё то же самое, в разных вариациях, можно делать и с dm (device mapper), на котором построен kpartx.
Для терминального управления dm предоставляется утилита:
Код:
[olej@xenix dm]$ dmsetup
Usage:

dmsetup
        [--version] [-h|--help [-c|-C|--columns]]
        [-v|--verbose [-v|--verbose ...]] [-f|--force]
        [--checks] [--manglename {none|hex|auto}]
        [-r|--readonly] [--noopencount] [--noflush] [--nolockfs] [--inactive]
        [--udevcookie <cookie>] [--noudevrules] [--noudevsync] [--verifyudev]
        [-y|--yes] [--readahead {[+]<sectors>|auto|none}] [--retry]
        [-c|-C|--columns] [-o <fields>] [-O|--sort <sort_fields>]
        [-S|--select <selection>] [--nameprefixes] [--noheadings]
        [--separator <separator>]

   help [-c|-C|--columns]
   create <dev_name>
       [-j|--major <major> -m|--minor <minor>]
       [-U|--uid <uid>] [-G|--gid <gid>] [-M|--mode <octal_mode>]
       [-u|--uuid <uuid>] [--addnodeonresume|--addnodeoncreate]
       [--readahead {[+]<sectors>|auto|none}]
       [-n|--notable|--table {<table>|<table_file>}]
   create --concise [<concise_device_spec_list>]
   remove [--deferred] [-f|--force] [--retry] <device>...
   remove_all [-f|--force]
   suspend [--noflush] [--nolockfs] <device>...
   resume [--noflush] [--nolockfs] <device>...
          [--addnodeonresume|--addnodeoncreate]
          [--readahead {[+]<sectors>|auto|none}]
   load <device> [<table>|<table_file>]
   clear <device>
   reload <device> [<table>|<table_file>]
   wipe_table [-f|--force] [--noflush] [--nolockfs] <device>...
   rename <device> [--setuuid] <new_name_or_uuid>
   message <device> <sector> <message>
   ls [--target <target_type>] [--exec <command>] [-o <options>] [--tree]
   info [<device>...]
   deps [-o <options>] [<device>...]
   stats <command> [<options>] [<device>...]
   status [<device>...] [--noflush] [--target <target_type>]
   table [<device>...] [--concise] [--target <target_type>] [--showkeys]
   wait <device> [<event_nr>] [--noflush]
   mknodes [<device>...]
   mangle [<device>...]
   udevcreatecookie
   udevreleasecookie [<cookie>]
   udevflags <cookie>
   udevcomplete <cookie>
   udevcomplete_all [<age_in_minutes>]
   udevcookies
   targets
   version
   setgeometry <device> <cyl> <head> <sect> <start>
   splitname <device> [<subsystem>]

<device> may be device name or (if only one) -u <uuid> or -j <major> -m <minor>
<mangling_mode> is one of 'none', 'auto' and 'hex'.
<fields> are comma-separated.  Use 'help -c' for list.
<concise_device_specification> has single-device entries separated by semi-colons:
    <name>,<uuid>,<minor>,<flags>,<table>
        where <flags> is 'ro' or 'rw' (the default) and any of <uuid>, <minor>
        and <flags> may be empty. Separate extra table lines with commas.
    E.g.: dev1,,,,0 100 linear 253:1 0,100 100 error;dev2,,,ro,0 1 error
Table_file contents may be supplied on stdin.
Options are: devno, devname, blkdevname.
Tree specific options are: ascii, utf, vt100; compact, inverted, notrunc;
                           blkdevname, [no]device, active, open, rw and uuid.

... ну и ещё ряд дополнительных tools:
Код:
[olej@xenix dm]$ ls /usr/sbin/dm*
/usr/sbin/dm_dso_reg_tool  /usr/sbin/dmevent_tool  /usr/sbin/dmidecode  /usr/sbin/dmraid.static  /usr/sbin/dmstats
/usr/sbin/dmeventd         /usr/sbin/dmfilemapd    /usr/sbin/dmraid     /usr/sbin/dmsetup


Вернуться к началу
 Профиль Отправить личное сообщение Отправить email  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 10 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Создано на основе phpBB® Forum Software © phpBB Group
Русская поддержка phpBB
[ Time : 0.178s | 15 Queries | GZIP : On ]