"Не удалить / домой" (который является @home).
Почему Вы хотели бы удалить подобъем, на котором находится Ваша учетная запись/home/, если Вы не создали снимок/home_snapshot_yymmdd для замены / домой?
Я плохо знаком с использованием btrfs, но это - то, что я узнал: / и @home (/и / домой) создаются btrfs, когда он установлен на Вашем HD как файловая система. Если Вы не делаете восстановление / домой от предыдущего снимка, насколько я понимаю, Вы отключили бы себя в коленях.
Однако можно смонтировать устройство, что / домой идет, КОРЕНЬ AS, использование монтируют/dev/sa/mnt/(или что когда-либо устройство работа btrfs система) Затем CD к/mnt/, и оттуда дайте удалить команду для @home. Затем можно использовать команду mv для перемещения @home_snapshot_yymmdd (или что когда-либо Вы назвали им) к @home. Перемещение может занять часы, в зависимости от размера @home. Затем CD назад в Вашу собственную учетную запись и проблему sudo umount/mnt/Вы никогда не имеете действительно выхода из системы или закрываете Вашу систему. Это - красота btrfs.
Сначала вы должны попытаться определить, в котором Итерация возникает проблема. Если вам повезло, то это всегда одинаково. Если вы не делаете это в любом случае, то вы должны подсчитать итерации и распечатать их или записывать их в файл:
exec 3>/my/logfile
iter=0
while whatevercondition; do
((iter++))
echo "$iter" >&3
done
Если проблема встречается всегда в той же итерации, то вам следует активировать вывод отладки:
CRASH_ITER=12345
iter=0
while whatevercondition; do
((iter++))
if [ "$iter" -eq "$CRASH_ITER" ]; then
set -vx
fi
done
Невоспроизводимые ошибки.
Если невозможно сузить ошибку к определенной итерации, то вы можете иметь Bash Написать полную вывод отладки в файл:
bash -vx ./script.sh 2>debug.txt
Если вы добавляете его в верхнюю часть вашего сценария Bash:
function DEBUG_TRAP() { typeset -p BASH_SOURCE; typeset -p BASH_LINENO; typeset -p FUNCNAME } trap DEBUG_TRAP INT
Вы можете получить информацию о том, где программа, отправив процесс сигнала INT:
Убить -Int Номер процесса
Вы можете получить номер процесса внутри сценария Bash, как это:
echo $$
, если вы не получаете никакого вывода после этого, то либо ваш скрипт перенаправил свой выход, либо скрипт висел внутри процесса. LSOF расскажет вам информацию о перенаправлении вывода, в то время как PS предоставит информацию о состоянии процесса.
Если бы ваш цикл выглядел так:
i=0
while [ "$((i+=1))" -le 5000 ] &&
set >iter.log
do monte_carlo
done
Для каждой итерации перезаписывался бы файл, в котором каждый раз перечислялись бы текущие значения всех переменных оболочки. Таким образом, если цикл прерывается при запуске 488, у вас будет файл iter.log, в котором значение $i
будет записано как 488, а все остальные переменные оболочки в начале итерации.
Чтобы отследить номер строки, которая не работает, можно пойти немного дальше:
i=0 PS4='$LINENO : '; set -x
while [ ... ] &&
set >iter.log
do ...
done 2>>iter.log
Это все равно перезапишет файл для каждой итерации, но также добавит отладочный вывод для каждой выполненной строки и включит номер ее строки в файл.