Я скопировал USB-накопитель в файл .img
используя dd
:
dd if=/dev/sdc of=myimage.img
Я хочу уменьшить размер раздела в изображении. Я испробовал несколько методов и всегда получал образ, смонтированный в петле, чей раздел по-прежнему был в полном размере USB.
Как мне изменить
myimage.img
чтобы иметь меньший раздел после монтирования по петле ?Нужно ли копировать нули в пустую часть раздела перед этим?
Нужно ли выполнять дефрагментацию, чтобы при уменьшении размера изображения я удалял пустые байты? (Из того, что я прочитал, Linux распространяется на весь раздел, поэтому я не ожидаю, что все данные в конце образа будут нулевыми байтами. Даже запись всех нулей будет просто потреблять пустые байты, где бы они ни лежали.)
ПРИМЕЧАНИЕ. Я не пытаюсь сэкономить место на диске, поэтому архивирование мне не поможет.
ФОН
У меня Linux установлен на USB-накопитель с использованием ext4
. Я намерен продублировать установку для нескольких устройств. Я сделал это успешно, но хотел бы создать на том же USB-накопителе раздел только для чтения с системой и небольшой раздел, обеспечивающий постоянное хранение. Вместо того, чтобы сломать мой USB, я пытаюсь изменить копию USB. Я надеюсь, что мы не отвлекаемся на этот фон.
Короче говоря, я сделал следующее:
# Create mount point in current directory
sudo mkdir mnt
# Loopback mount the image
fdisk -l myimage.img
sudo mount -o offset=<partion_block_start * block_size> myimage.img mnt
# Copy all zeros to remaining space of the image
cd mnt
sudo dd if=/dev/zero of=filler conv=fsync bs=1M
rm filler
cd ..
Во- первых, я пытался использовать parted
, как описано в этом доступа привилегированного ответа и qemu-img
, как описано в этом другом доступа привилегированного ответ.
sudo umount mnt
parted myimage.img
# At parted command prompt
(parted) resizepart 1
# Entered my end <target size>. Note that parted uses zero-based
# indexing. This could be your final image size. In my case, the way the
# Linux installer worked, the partition started at 1M.
(parted) print
# I see that the partition is now sized as I expect
(parted) exit
# Just another sanity check
sudo parted -m esp3_007.img unit B print
# I see that the partition is now sized as I expect
Когда я пытаюсь снова смонтировать образ, он работает нормально, но df
прежнему показывает раздел в том же размере. Итак, я попытался
qemu-img resize myimage.img <target_size>
И теперь, когда я пытаюсь смонтировать образ, я получаю сообщение об ошибке «mount: неправильный тип fs, неверный параметр, плохой суперблок ...».
Затем я попытался использовать gparted
как описано в этом посте за пределами сайта. GUI показывал полный раздел, если я не запускал parted
в первую очередь. Даже тогда графический интерфейс не позволил бы мне изменить размер раздела.
Чтобы попытаться уменьшить размер раздела и начать с новой копии myimage.img
я попытался использовать fdisk
описанный в этом ответе AskUbuntu.
sudo fdisk myimage.img
Command (m for help): d
Command (m for help): n
Command action
e extended
p primary partition (1-4)
p
Partition number (1-4, default 1): 1
# defaults on the rest seemed to be correct in my case.
Когда я смонтировал раздел, он все еще показывал тот же размер.