fsck на корневом разделе на пользовательской плате на основе BBB

545
AnkurTank

У нас есть специализированная встроенная плата Linux на базе BeagleBone Black. Он имеет Linux-3.12, 256 МБ ОЗУ и 4 ГБ eMMC с ext4файловой системой.

Иногда мы сталкиваемся с ошибками файловой системы (редко, но не невозможно). Поэтому мы хотим проверить ошибки файловой системы и исправить их при загрузке.
Очевидно, что мы не хотим, чтобы fsck или любая другая утилита уничтожала какие-либо данные в файловой системе.

У нас на основе busybox, SysVinitпоэтому /forcefsckне работает :( Затем я использовал /etc/fstab(установив 5-е поле на 1), а затем запустил fsck -pиз rcSскрипта.

Эта комбинация работает для разделов, отличных от rootfsраздела. У меня есть пара вопросов по этому поводу.

  1. Есть в любом случае для запуска fsckна rootfsперегородке?
  2. Может fsck -pможете уничтожить данные на разделе?
  3. Есть ли лучший способ справиться с этой ситуацией, я имею в виду любой сервис, который будет проверять и исправлять ошибки файловой системы?
1

1 ответ на вопрос

1
dirkt

Обычный способ для настольных дистрибутивов Linux на основе SysVinit - запрашивать пароль root во время загрузки, когда он обнаруживает ошибки в корневой файловой системе. Затем вы можете использовать это для запуска fsckна root fs. Я не знаю, делает ли это ваш встроенный дистрибутив, но определенно возможно настроить его таким образом.

Если во время загрузки не обнаружено ошибок, другой вариант - войти в систему как пользователь root, остановить все, что в действительности не требуется, перемонтировать корневую файловую систему только для чтения, а затем запустить fsck.

Это касается корневой файловой системы вашего блочного хранилища, а не rootfs . Rootfs - это минимальная файловая система, основанная на оперативной памяти, которая используется во время загрузки и не может быть повреждена (если только образ загрузочного ядра не поврежден или у вас плохая память).

В принципе fsck -pпредназначен только для «безопасного» ремонта, но если вы действительно хотите убедиться, что ничего плохого не произойдет, запустите его вручную, и вам будет предложено ввести каждое действие. Если по какой-то причине в корневой файловой системе есть ценные данные (этого не должно случиться, но, возможно, вы это делаете), ddсначала сделайте резервную копию, используя .

Спасибо за ответ dirkt. Мы используем только root-пользователя в нашем форуме. У нас пока нет многопользовательской системы. У нас даже нет initramfs / ramdisk, который мы загружаем напрямую из корневой файловой системы блочного устройства. AnkurTank 7 лет назад 0
Root или многопользовательский не имеет значения, это зависит от того, как настроен sysv init. Современные ядра Linux имеют initramfs, который встроен в образ, я не знаю, какой образ вы используете. Если вы действительно в конечном итоге используете `/` в качестве (основанного на ram) rootfs, который используется во время загрузки как root в современных ядрах, как я уже сказал, то на самом деле нет способа испортиться, потому что он создается каждый раз заново. Если ваше ядро ​​настроено на использование какого-либо блочного устройства в качестве пользователя root, то это не так. Все зависит от того, как настроено ваше ядро, чего я не вижу отсюда. dirkt 7 лет назад 0
Я мог запустить `fsck -q` из` rcS` (на основе busybox), и это исправило ошибку в текущем корневом разделе. Однако для этого нам нужно иметь запись в `/ etc / fstab`. Между тем, сейчас я пытаюсь протестировать различные виды ошибок файловой системы и посмотреть, можно ли ее исправить с помощью `fsck` или нет. AnkurTank 7 лет назад 0

Похожие вопросы