Здравствуйте, коллеги!
В данном случае речь идет о минисистеме, типа rescue на флешке. В squashfs собран образ, который в упакованном виде весит около 300 Мб.
Я полностью подменил /init в initrd и там все прекрасно собирается в overlay где rw слоем может выступать ОЗУ или раздел диска.
Все работает, но есть не приятный момент: если при загруженной с флешки системе эту флешку выдрать, то… Спасает лишь hard reset.
Ну и иногда случаются артефакты с самой флешкой. Т.е. флешку не дергали, тем не менее изредка начинается какая-то непонятная фигня, типа не все нормально считалось и вообще появляются какие-то фантомные неисправности диска. Именно фантомные, т.к. все проверялось и ни каких ашыпок нет.
Вот и появилась мысль чекать в initrd размер squashfs файла и если его размер ниже некоего разумного значения, например до 500 Мб, то сначала загнать его в ОЗУ и лишь потом собирать overlay.
Вроде все просто, но просто было на бумаге. Почему-то в initrd вылетают ашыпки input-output в процессе записи образа в tmpfs.
mount -t tmpfs tmpfs /tmp
mkdir /tmp/mnt
mount /dev/sdc1 /tmp/mnt # монтирование раздела,
#на котором лежит squashfs файл.
mkdir /tmp/sfs
cp /tmp/mnt/sys.squashfs /tmp/sfs # вот тут и происходит ошибка
umount /tmp/mnt
Я привел максимально упрощенный отрывок кода без проверок и прочего. Но предположим, что sys.squashfs действительно лежит на /dev/sdc1, он смонтировался, а размер ОЗУ 4Gb и более.
Тем не менее, именно в процессе банального копирования очень часто происходит ошибка с руганью на input-output.
Что я делаю не так?
Может, вообще идея с записью образа в ОЗУ, нежнеспособная?