Я монтирую образ диска через устройство loop (losetup -f image.img). Он содержит таблицу разделов и я заставляю ядро ее прочитать: partprobe /dev/loop1.
Я монтирую /dev/loop1p1, исправляю то, что хочу исправить, размонтирую обратно файловую систему. Удаляю файл с устройства loopback (losetup -d /dev/loop1). Но /dev/loop1p1 не исчезает.
Я даже пытался пересоздать lodevice, добавить и удалить таблицу разделов через fdisk. Но все мои попытки провалились:
Таблица разделов была изменена!
Вызов ioctl() для повторного чтения таблицы разделов.
ВНИМАНИЕ: Повторное чтение таблицы разделов завершилось ошибкой 22: Недопустимый аргумент. Ядро по-прежнему использует старую таблицу. Новая таблица будет использована при следующей перезагрузке или после запуска partprobe(8) или kpartx(8) Синхронизация дисков.
Раздел не используется никаким образом, но я не могу его освободить. Есть ли способ удалить его без перезагрузки?
Вижу в dmesg несколько записей:
[4649002.505727] loop1: rw=0, want=211812300, limit=62914560 [4649002.505753] Ошибка ввода-вывода буфера на устройстве loop1p1, логический блок 52952562 [4649002.505870] попытка доступа за пределами конца устройства
И они достают мои нагио.
решение1
Перезагрузка должна исправить ваше ядро. И в следующий раз, вместо запуска losetup
вручную partprobe
, используйте kpartx
:
kpartx -v -a image.img
и чтобы его разрушить:
kpartx -d image.img