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

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

# blockdev --getsz /dev/loop0
3534848

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

# blockdev --getsz /dev/zram1
524288

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

# 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 ответ

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

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

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 не обязательно передает.

Другие вопросы по тегам