Ну, существует несколько случаев:
echo 'repair' > /sys/block/md0/md/sync_action
. Проблема решена без потери данных. (Я предполагаю, что это не имеет место для Вас, но действительно необходимо считать изменение этим.)cat /dev/zero > tempfile
заполнить свободное пространство нулями. Сделайте это как корень (существует пространство, зарезервированное только для корня), вероятно, в однопользовательском режиме (таким образом, ничто не повреждается от исчерпывания пространства). После этого исчерпывает пространство, удалите файл (rm tempfile
).fsck -fc
(выполненный с файловой системой размонтированный, или худший случай в только для чтения во время ранней начальной загрузки, если это - корневая файловая система) скажет Вам который файлы. Замените их от резервного копирования.Его также возможный это badblocks -n
, то, которое должно только быть сделано в размонтированной файловой системе, вызовет перекарту. Это не должно терять данные (кроме того, что было в сбойных блоках, который уже потерян).
Если Вы хотите написать сценарий его на основе вывода badblocks (который не безопасен, это оставляет Вас с тихим повреждением), это довольно легко. Каждая строка вывода badblocks дает Вам номер блока, на основе Вашего размера блока (512 в Вашем примере). Используйте тот же размер блока для dd's bs
. Номер блока - Ваш seek
для dd. Ваш count
1 (или выше, если существует несколько сбойных блоков подряд). of
раздел (или диск), Вы работали на badblocks. Польза if
/dev/zero
.
Более легкий способ сделать это, чем сценарии оболочки, после того как Вы приобретаете навык его, должно использовать, делают, на который Вы, вероятно, видели ссылку прежде.
Очень простой make-файл мог бы быть похожим на это:
myproject: myproject.cpp
g++ myproject.cpp -o myproject
По умолчанию make
выбирает первую цель, если Вы не будете указаны, так как существует только один в этом случае, она сделает то, что Вы видите там. Цель является маркировкой перед двоеточием (myproject); после двоеточия необходимые как условие цели. Если те цели не перечислены, они, как предполагается, являются файлами. В этом случае, если myproject.cpp не изменился, так как вывод цели myproject сделал ("myproject" двоичный файл), делает, ничего не делает. Если это имеет, это перекомпилировало.
Значение использования делает, становится более ясным, поскольку вещи становятся более сложными:
flags = -Wall -g -O2
myproject: myproject.h myproject.cpp somepart.o
g++ $(flags) somepart.o myproject.cpp -o myproject
somepart.o: somepart.h somepart.cpp
g++ $(flags) -c somepart.cpp -o somepart.o
.h файлы являются prereqs с тех пор, если Вы изменяетесь один, Вы хотите части, требующие перекомпилированного. Таким образом, теперь можно сделать make somepart.o
чтобы просто скомпилировать объект, или можно сделать make
который будет использовать первую цель (myproject), который требует актуального "somepart.o", поэтому если это не будет доступно, то она сделает все этим также.
Выполнение этого со сценарием удара не так легко, который является, вероятно, почему make
оказался. К сожалению, "приобретение навыка его" может занять немного времени. l0b0 уже связан с этим:
http://www.gnu.org/software/make/manual/make.html
Остерегайтесь сначала, которые делают, пробел, чувствительный особенно относительно использования фактических вкладок и не пробелов.
Для этого Вы обычно использовали бы make compile
, но можно легко прокрутить собственное путем создания названного сценария MyProject
который проверяет $1
для предварительно установленного списка подкоманд:
case "$1" in
compile)
my_compile_command(s)
shift
;;
*)
echo "$0: Unknown command: $1"
exit 1
;;
esac
Ссылки:
Лучше сохраните стандартные команды. Т.е. make
компилирует Ваш проект, и так далее. Легче для сотрудников взять, намного легче настроить, менее случайный материал, чтобы помнить (или настроить на следующей машине/проекте). Большинство проектов Вы продолжите работать, не будет Вашим, и хранение, что оборудование как патч по ним будет большим количеством стычки.