Что делает fsck настолько медленным в больших файловых системах?

Я предполагаю, что Вы знаете для каждой из Ваших команд, какую часть возврата команды Вы хотите сохранить.

В Вашем примере это было бы Word номер 7 и 47.

Сделайте это как это (отметьте задние галочки вокруг своей команды ifconfig):

array=(`ifconfig`)

Покажите все элементы этого массива:

echo ${array[@]}
eth0 Link encap:Ethernet HWaddr 30:F7:0D:6D:34:CA inet addr:10.106.145.12 Bcast:10.106.145.255 Mask:255.255.255.0 inet6 addr: fe80::32f7:dff:fe6d:34ca/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:1104666 errors:0 dropped:0 overruns:0 frame:0 TX packets:2171 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:444437904 (423.8 MiB) TX bytes:238380 (232.7 KiB) lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.255.0.0 inet6 addr: ::1/128 Scope:Host UP LOOPBACK RUNNING MTU:16436 Metric:1 RX packets:15900 errors:0 dropped:0 overruns:0 frame:0 TX packets:15900 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:467306 (456.3 KiB) TX bytes:467306 (456.3 KiB)

Покажите определенные слова:

echo ${array[6]} ${array[46]}
addr:10.106.145.12 addr:127.0.0.1

Передайте результат по каналу в sed для извлечения только IP-адресов:

echo ${array[6]} ${array[46]} | sed 's/addr://g'
10.106.145.12 127.0.0.1

Используя изящный подход Arpith с 'чтением' вот гибкий ответ.

read IPETH0 IPLO <<< $(echo ${array[6]} ${array[46]} |\
sed 's/addr://g')
echo $IPETH0 $IPLO
10.106.145.12 127.0.0.1

Обратите внимание на то, что элементы массива считаются от 0. Поэтому Ваш Word номер 7 упоминался бы как "$ {массив [6]}".

Индексы массива являются положительными целыми числами. Таким образом, можно сделать все виды вычислений в сценарии оболочки для выбора определенных слов (как диапазоны или для циклов)...

Для записи портативного сценария, необходимо было бы сохранить своего рода таблицу с этими числами. В моей системе (BSD) IP-адреса были бы номерами 17 и 49 вместо Вашего Linux номера 7 и 47. Также получившие строки выглядят по-другому (игнорирование глобального идентификационного адреса моего локального и Arpith):

echo ${array2[16]}
192.168.0.103

echo ${array2[48]}
127.0.0.1

"чистый awk slm" подход (см. ниже) перестал бы работать в моей системе BSD. Функция разделения в массив не работала бы моей печатью команды 'ifconfig' "127.0.0.1" и "addr:127.0.0.1" Arpith...

read IPETH0 IPLO <<< $(ifconfig |\
 awk '/inet[[:space:]]/ { split($2,a,":"); print a[2]}')

HTH

bernie

4
30.06.2014, 03:03
2 ответа

Любой простой способ еще больше улучшить время fsck?

@HaukeLaging прав, вещи можно ускорить, изменив плотность входов в файловую систему. Смотрите -i.

0
27.01.2020, 21:05

Целью запуска fsck является поиск несоответствий. Это означает обход файловой системы для просмотра каждой записи каталога (каталога/файла ), а также данных, стоящих за ним, чтобы убедиться, например, что размер в записи каталога соответствует фактическому размеру данных. Этот процесс всегда был медленным. Раньше мы этого не замечали, так как файловые системы были намного меньше, содержали меньше файлов, а компьютеры все равно загружались дольше (службы запускались последовательно ). Поскольку скорость вращения дисков не увеличивается так же, как емкость, выполнение проверки файловой системы во время запуска системы становится все менее и менее осуществимым.

Вот почему многие относительно современные файловые системы, такие как ext3, ext4, reiserfs, XFS,... больше не проверяют файловую систему при перезагрузке. Вместо этого они используют журнал для ведения бухгалтерского учета. Перед записью изменения на диск оно записывается в журнал. После завершения изменения незавершенная транзакция помечается в журнале как завершенная. Если система умирает до завершения транзакции, файловая система знает, какие транзакции выполнялись, и может «воспроизвести» эти транзакции, чтобы вернуть файловую систему в согласованное состояние. Это, как правило, намного быстрее, чем запуск проверки файловой системы. Современные файловые системы используют множество хитрых уловок, чтобы уменьшить накладные расходы на поддержание журнала -, на практике вы часто не замечаете разницы.

В файловых системах последнего поколения, таких как btrfs, ZFS,... используются методы копирования -на -записи , что означает, что транзакция, которая изменяет файл или метаданные, никогда не перезаписывает существующие данные. Вместо этого новые данные записываются в отдельные блоки. Как только новая копия готова, файловая система автоматически переключается на использование новой копии.Это также эффективно предотвращает несогласованность файловой системы (и имеет некоторые другие преимущества ).

Рассмотрите возможность использования журналируемой файловой системы или копии -в -файловой системе записи , если вы хотите, чтобы ваша система запускалась быстро.

2
27.04.2020, 18:36

Теги

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