сценарий для выключения сервера, если нет активных пользователей

Все устройство вывода стирается независимо от того, кратен ли его размер размеру блока, который вы передаете в ddили нет.

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

Вместо того, чтобы использовать ddи беспокоиться о том, правильно ли вы его используете (, как это бывает, это работает в данном конкретном случае, но это сложно и иногда не работает работа ), просто используйтеcat.

cat /dev/zero >/dev/sdX

Вопреки распространенному в сети мнению, в ddнет абсолютно никакой магии, которая делала бы его лучше подходящим для записи на диск. Магия находится в файлах /dev. Любой инструмент, который может работать с двоичными данными, например любой современный catили head, может выполнять ту же работу, что и dd, если вы не передаете флаги, такие как seekили skip.

Обратите внимание, что проблема, общая для ddи cat, заключается в том, что при успешной операции они выдают ошибку «Нет места на устройстве» (ENOSPC ). Если вы поместите это в сценарий, вам нужно либо убедиться, что ошибка ENOSPC, либо использовать другой метод. Более надежный метод заключается в том, чтобы сначала определить размер устройства (, т.е. используя /proc/partitionsпод Linux ), затем запишите точное количество байтов с помощью такого инструмента, как head.

size=$(/dev/sdX

2
25.01.2020, 16:16
1 ответ

Это должен быть комментарий, но у меня нет 50 очков репутации, поэтому я потеряю еще больше, опубликуйте этот комментарий как ответ:)

Если вы будете запускать этот скрипт каждые пять минут, ваш сервер может выключиться при загрузке еще до того, как вы сможете войти в систему. Так что не очень хорошая идея. Напишите системный таймер.

6
27.01.2020, 21:53

Теги

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