Почему dmsetup не работает, когда я пытаюсь создать снимок?

Я хотел бы создать устройство COW для существующего блочного устройства, используя dmsetup . Блочное устройство:

# blockdev --getsz /dev/loop0
3534848

Я пытаюсь использовать RAM-диск 256M в качестве резервного хранилища:

# blockdev --getsz /dev/zram1
524288

Я использую следующую команду, которая, похоже, соответствует документации , а также другим sources :

# dmsetup create mysnap --table '0 3534848 snapshot /dev/loop0 /dev/zram1 N 4'

Но это не удается:

device-mapper: reload ioctl on mysnap failed: Invalid argument
Command failed

А ядро ​​предоставляет следующую дополнительную информацию:

[ 8372.346442] device-mapper: table: 253:11: snapshot: Couldn't create exception store
[ 8372.346454] device-mapper: ioctl: error adding target to table

Я надеюсь, что кто-нибудь сможет объяснить, почему приведенная выше команда приводит к ошибке.

1
задан 5 January 2018 в 17:00
2 ответа

По-видимому, это связано со значением chunksize . Использование chunksize из 4, как в моем вопросе, приводит к ошибке, но если я использую 8 или 16 и т. Д., Он работает нормально:

dmsetup create mysnap --table '0 3534848 snapshot /dev/loop0 /dev/zram1 N 8'
0
ответ дан 4 December 2019 в 04:16

dmesg выдавал мне другую ошибку в моем случае:

[ 5473.934324] device-mapper: table: 253:0: len=1953521668 not aligned to h/w logical block size 4096 of sdb
[ 5473.934327] device-mapper: core: Cannot calculate initial queue limits
[ 5473.934331] device-mapper: ioctl: unable to set up device queue for new table.

Я смог исправить это, уменьшив длину до следующего кратного 4096 (что я мог сделать, потому что было достаточно неиспользуемых секторов в конец диска).

Возможно, основная мораль этой истории заключается в том, что во многих случаях ядро ​​может выдавать полезные сообщения, которые dmsetup не обязательно передает.

0
ответ дан 4 December 2019 в 11:28

Теги

Похожие вопросы