у меня есть Samsung XE303C12, и я запускал Arch Linux ARM на нем с SD-карты. Таблица разделов SD карты как таковой:
- раздел ядра Chrome OS, в который входит ядро сигнализации, обернутое vboot.
- раздел ext2, который я бы использовал для настройки U-Boot всякий раз, когда он установлен в раздел 1 вместо ядра Arch Linux.
- корневая файловая система, на которую я установил Arch Linux.
A недавняя попытка обновить все пакеты одновременно привела к повреждению корневой файловой системы. Я видел какое-то сообщение о мигании ядра на какой-то раздел на SD-карте и файловой системе, которые не могут быть смонтированы только для чтения или чтения-записи или что-то еще. Я пытался исправить это с помощью fsck
, что несколько раз подсказывало мне, что делать с inodes, но как только я понял, что, вероятно, будет спрашивать меня об этом для каждого inode в разделе, я запустил fsck -y /dev/mmcblk1p3
. Это пробежало, может быть, несколько сотен inodes до остановки. Я не могу вспомнить сообщение об ошибке.
в надежде сохранить данные для будущего восстановления, я резервное копирование /dev/mmcblk1p3
к файловой системе FAT32 на USB-накопителе с помощью dd
. Поскольку FAT32 не может содержать файлы размером более 4 гигабайт, я решил разбить его на сегменты, используя некоторый код оболочки и петли.
пропустив несколько вещей, я понял, что dd
быстрее в начале процесса (я использовал bs
установите для большего кратного 512 чтобы сделать это быстрее), поэтому первый сегмент 64 MiB будет записан в файловую систему USB за 3 секунды, и он будет становиться все медленнее с каждой итерацией. Я узнал, что это потому, что дисковый кэш заполняется.
я искал способ очистить кэш для dd
и наткнулся на этот пост на веб-сайте Unix Stack Exchange. Верхний ответ говорит делать sync; echo 3 > /proc/sys/vm/drop_caches
. Комментарий к этому ответу отмечает, что эта настройка не является липкой, и ссылка в этом комментарии мне пришла в голову идея сделать echo 3 > /proc/sys/vm/drop_caches
перед каждой итерацией dd
. Я пробовал это и dd
все еще упал в скорости копирования.
второе решение, упомянутое в ответе на первый пост, состояло в том, чтобы запустить dd
С iflag=direct
как способ обхода кэша. Я сделал это, но я также использовал oflag=direct
поскольку я полагал, что кэш будет применяться как к копированию с SD-карты, так и к записи на USB. этой комментарии заявил, что nocache
вместо direct
, так что я пробовал. Оба метода испытали одинаковое падение с ~17 Мб / с до ~1-3 МБ / с.
я предполагаю, что я не мог бы использовать эти методы правильно, так что есть в любом случае, чтобы надежно очистить кэш каждую итерацию, чтобы сделать dd
быстрее или какой-то способ просто не использовать кэш вообще?