Особенно интересным и актуальным это стало в прошедшие (с создания темы) несколько лет, применительно к разнообразным SSD и M2 NVME и всяким подобным флеш-устройствам хранения без движущихся честей - т.е. без выраженной зависимости времени доступа от положения сектора на носителе.Olej писал(а): ↑22 июн 2018, 17:43Смысл этих нудных экспериментов с kpartx в том, что (это имеет отношение к разговору о драйверах блочных устройств) блочное устройство Linux ничем не отличается от неразмеченной последовательности байт, на которую а). затем наложена структура разделов (MBR, GPT) и б). форматирование этих разделов под требуемые типы файловых систем.
Device mapper
Модератор: Olej
- Olej
- Писатель
- Сообщения: 21338
- Зарегистрирован: 24 сен 2011, 14:22
- Откуда: Харьков
- Контактная информация:
Device mapper
- Olej
- Писатель
- Сообщения: 21338
- Зарегистрирован: 24 сен 2011, 14:22
- Откуда: Харьков
- Контактная информация:
Device mapper
К сожалению, я как-то забегался тогда, и упустил теперь эту проработку при подготовке 1-го издания книги: Книга: "Расширения ядра Linux: драйверы и модули".
Сейчас самое время заняться и подготовить фактический материал для 2-го издания.
Код: Выделить всё
olej@R420:~$ lsb_release -a
No LSB modules are available.
Distributor ID: Linuxmint
Description: Linux Mint 21.1
Release: 21.1
Codename: vera
- Olej
- Писатель
- Сообщения: 21338
- Зарегистрирован: 24 сен 2011, 14:22
- Откуда: Харьков
- Контактная информация:
Device mapper
У меня для этого дела по случаю ("белый рояль в кустах" ) есть на сервере пустой раздел на одном из дисков, для экспериментов:
Код: Выделить всё
olej@R420:/mnt/sdc2$ df /dev/sdc2
Файл.система 1K-блоков Использовано Доступно Использовано% Cмонтировано в
/dev/sdc2 954122316 28 905582232 1% /mnt/sdc2
Код: Выделить всё
olej@R420:~$ mount | grep sdc2
/dev/sdc2 on /mnt/sdc2 type ext4 (rw,nosuid,nodev,noexec,relatime,user)
Код: Выделить всё
olej@R420:~/2023/EmerCoin$ cd /mnt/sdc2
olej@R420:/mnt/sdc2$ ls -l
итого 16
drwx------ 2 olej olej 16384 мая 20 2022 lost+found
- Olej
- Писатель
- Сообщения: 21338
- Зарегистрирован: 24 сен 2011, 14:22
- Откуда: Харьков
- Контактная информация:
Device mapper
Код: Выделить всё
olej@R420:/mnt/sdc2$ dd if=/dev/zero of=./vdisk bs=10M count=100
100+0 записей получено
100+0 записей отправлено
1048576000 байт (1,0 GB, 1000 MiB) скопирован, 0,905297 s, 1,2 GB/s
Код: Выделить всё
olej@R420:/mnt/sdc2$ ls -l
итого 1024020
drwx------ 2 olej olej 16384 мая 20 2022 lost+found
-rw-rw-r-- 1 olej olej 1048576000 мар 31 16:49 vdisk
- Olej
- Писатель
- Сообщения: 21338
- Зарегистрирован: 24 сен 2011, 14:22
- Откуда: Харьков
- Контактная информация:
Device mapper
Сейчас, в отличие от тогда, этот номер не проходит
Код: Выделить всё
olej@R420:/mnt/sdc2$ sudo kpartx -a -v ./vdisk
[sudo] пароль для olej:
Код: Выделить всё
olej@R420:/mnt/sdc2$ ls -l /dev/mapper
итого 0
crw------- 1 root root 10, 236 мар 31 11:03 control
Код: Выделить всё
olej@R420:/mnt/sdc2$ ls -l /dev/dm*
итого 0
crw------- 1 root root 249, 0 мар 31 11:03 system
- Olej
- Писатель
- Сообщения: 21338
- Зарегистрирован: 24 сен 2011, 14:22
- Откуда: Харьков
- Контактная информация:
Device mapper
Для чистоты экспериментирования (чтобы исключить внутреннее структурирование виртуального диска) каждый раз начинаем с чистого неразмеченного куска:
Код: Выделить всё
root@R420:/mnt/sdc2# rm vdisk
olej@R420:/mnt/sdc2$ dd if=/dev/zero of=./vdisk bs=10M count=100
100+0 записей получено
100+0 записей отправлено
1048576000 байт (1,0 GB, 1000 MiB) скопирован, 1,261 s, 832 MB/s
Код: Выделить всё
olej@R420:/mnt/sdc2$ losetup -a
olej@R420:/mnt/sdc2$
Код: Выделить всё
root@R420:/mnt/sdc2# kpartx -a -vvv vdisk
root@R420:/mnt/sdc2# echo $?
0
Код: Выделить всё
olej@R420:/mnt/sdc2$ losetup -a
/dev/loop0: []: (/mnt/sdc2/vdisk)
- Olej
- Писатель
- Сообщения: 21338
- Зарегистрирован: 24 сен 2011, 14:22
- Откуда: Харьков
- Контактная информация:
Device mapper
А теперь на нём создадим структуру диска (метка, разделы...)
Код: Выделить всё
root@R420:/mnt/sdc2# fdisk /dev/loop0
Добро пожаловать в fdisk (util-linux 2.37.2).
Изменения останутся только в памяти до тех пор, пока вы не решите записать их.
Будьте внимательны, используя команду write.
Устройство не содержит стандартной таблицы разделов.
Создана новая метка DOS с идентификатором 0x8ca2910f.
Команда (m для справки): o
Создана новая метка DOS с идентификатором 0xc81a4efc.
Команда (m для справки): n
Тип раздела
p основной (0 primary, 0 extended, 4 free)
e расширенный (контейнер для логических разделов)
Выберите (по умолчанию - p): p
Номер раздела (1-4, по умолчанию 1):
Первый сектор (2048-2047999, по умолчанию 2048):
Last sector, +/-sectors or +/-size{K,M,G,T,P} (2048-2047999, по умолчанию 2047999): +200M
Создан новый раздел 1 с типом 'Linux' и размером 200 MiB.
Команда (m для справки): n
Тип раздела
p основной (1 primary, 0 extended, 3 free)
e расширенный (контейнер для логических разделов)
Выберите (по умолчанию - p): p
Номер раздела (2-4, по умолчанию 2):
Первый сектор (411648-2047999, по умолчанию 411648): 600000
Last sector, +/-sectors or +/-size{K,M,G,T,P} (600000-2047999, по умолчанию 2047999): +200M
Создан новый раздел 2 с типом 'Linux' и размером 200 MiB.
Команда (m для справки): p
Диск /dev/loop0: 1000 MiB, 1048576000 байт, 2048000 секторов
Единицы: секторов по 1 * 512 = 512 байт
Размер сектора (логический/физический): 512 байт / 512 байт
Размер I/O (минимальный/оптимальный): 512 байт / 512 байт
Тип метки диска: dos
Идентификатор диска: 0xc81a4efc
Устр-во Загрузочный начало Конец Секторы Размер Идентификатор Тип
/dev/loop0p1 2048 411647 409600 200M 83 Linux
/dev/loop0p2 600000 1009663 409664 200M 83 Linux
Команда (m для справки): w
Таблица разделов была изменена.
Вызывается ioctl() для перечитывания таблицы разделов.
Перечитывание таблицы разделов не удалось.: Недопустимый аргумент
The kernel still uses the old table. The new table will be used at the next reboot or after you run partprobe(8) or partx(8).
Код: Выделить всё
root@R420:/mnt/sdc2# partprobe /dev/loop0
Код: Выделить всё
root@R420:/mnt/sdc2# fdisk -l /dev/loop0
Диск /dev/loop0: 1000 MiB, 1048576000 байт, 2048000 секторов
Единицы: секторов по 1 * 512 = 512 байт
Размер сектора (логический/физический): 512 байт / 512 байт
Размер I/O (минимальный/оптимальный): 512 байт / 512 байт
Тип метки диска: dos
Идентификатор диска: 0xc81a4efc
Устр-во Загрузочный начало Конец Секторы Размер Идентификатор Тип
/dev/loop0p1 2048 411647 409600 200M 83 Linux
/dev/loop0p2 600000 1009663 409664 200M 83 Linux
Код: Выделить всё
root@R420:/mnt/sdc2# gdisk -l /dev/loop0
GPT fdisk (gdisk) version 1.0.8
Partition table scan:
MBR: MBR only
BSD: not present
APM: not present
GPT: not present
***************************************************************
Found invalid GPT and valid MBR; converting MBR to GPT format
in memory.
***************************************************************
Disk /dev/loop0: 2048000 sectors, 1000.0 MiB
Sector size (logical/physical): 512/512 bytes
Disk identifier (GUID): 8D15B77D-D3F6-43A7-8357-79237B64BE7D
Partition table holds up to 128 entries
Main partition table begins at sector 2 and ends at sector 33
First usable sector is 34, last usable sector is 2047966
Partitions will be aligned on 64-sector boundaries
Total free space is 1228669 sectors (599.9 MiB)
Number Start (sector) End (sector) Size Code Name
1 2048 411647 200.0 MiB 8300 Linux filesystem
2 600000 1009663 200.0 MiB 8300 Linux filesystem
- Olej
- Писатель
- Сообщения: 21338
- Зарегистрирован: 24 сен 2011, 14:22
- Откуда: Харьков
- Контактная информация:
Device mapper
Код: Выделить всё
root@R420:/mnt/sdc2# kpartx -a -vvv vdisk
add map loop0p1 (253:0): 0 409600 linear 7:0 2048
add map loop0p2 (253:1): 0 409664 linear 7:0 600000
Код: Выделить всё
olej@R420:/mnt/sdc2$ ls -l /dev/mapper/*
crw------- 1 root root 10, 236 мар 31 11:03 /dev/mapper/control
lrwxrwxrwx 1 root root 7 мар 31 19:04 /dev/mapper/loop0p1 -> ../dm-0
lrwxrwxrwx 1 root root 7 мар 31 19:04 /dev/mapper/loop0p2 -> ../dm-1
Код: Выделить всё
olej@R420:/mnt/sdc2$ ls -l /dev/dm-*
brw-rw---- 1 root disk 253, 0 мар 31 19:04 /dev/dm-0
brw-rw---- 1 root disk 253, 1 мар 31 19:04 /dev/dm-1
Это уже полноценные диски ... с которыми можно делать всё, что и с любыми другими дисками:
Код: Выделить всё
root@R420:/mnt/sdc2# hdparm -tT /dev/dm-0
/dev/dm-0:
Timing cached reads: 19242 MB in 1.99 seconds = 9667.55 MB/sec
Timing buffered disk reads: 200 MB in 0.17 seconds = 1199.75 MB/sec
Код: Выделить всё
root@R420:/mnt/sdc2# hdparm -tT /dev/dm-1
/dev/dm-1:
Timing cached reads: 14856 MB in 1.99 seconds = 7454.76 MB/sec
Timing buffered disk reads: 200 MB in 0.13 seconds = 1559.60 MB/sec
- Olej
- Писатель
- Сообщения: 21338
- Зарегистрирован: 24 сен 2011, 14:22
- Откуда: Харьков
- Контактная информация:
Device mapper
Теперь на этих 2-х разделах расфрматируем 2 разных файловых системы:
Код: Выделить всё
root@R420:/mnt/sdc2# sudo mkfs.ext2 /dev/dm-0
mke2fs 1.46.5 (30-Dec-2021)
Discarding device blocks: done
Creating filesystem with 51200 4k blocks and 51200 inodes
Filesystem UUID: d9a32344-280e-45bd-b118-ffd63839bbc1
Superblock backups stored on blocks:
32768
Allocating group tables: done
Сохранение таблицы inod'ов: done
Writing superblocks and filesystem accounting information: готово
Код: Выделить всё
root@R420:/mnt/sdc2# sudo mkfs.vfat /dev/dm-1
mkfs.fat 4.2 (2021-01-31)
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 3 гостя