В настоящее время на Ubuntu Linux, но я заметил это и на других ОС. По-видимому, любой пользователь может выполнить sync
команду - но почему это? Я вижу только недостаток: замедление работы системы из-за ненужных операций записи на диск.
Почему каждый пользователь может выполнить sync
?
/bin/sync
как ее оболочка, поэтому вы можете синхронизировать ее без входа в систему.sync
-calls (например, в HP-Unix). Причина заключается в том, чтобы избежать ненужных ожиданий из-за того, что масса ожидающих записей записывается на диск одновременно.Ответы:
Для непривилегированного пользователя существует множество способов замедлить работу системы, и запуск синхронизации далеко не самый эффективный. С другой стороны, наличие данных файловых систем, записанных на диск, является вполне законным запросом, поэтому запрещать пользователям (и, следовательно, их процессам) делать это было бы чрезмерно.
В любом случае, я не согласен с вашим утверждением «ненужные записи на диск». Эти записи, безусловно, необходимы и в любом случае произойдут автоматически через небольшой промежуток времени.
Нет даже гарантии, что синхронный вызов сделает что-то конкретное вообще, в зависимости от его реализации. Вызов sync - это, как определяет стандарт POSIX , всего лишь «предложение» для ОС очищать кеш файловой системы, но это не обязательно приводит к немедленному сбросу. Точнее, вызовы просят ОС запланировать очистку кеша, но нет никакой гарантии, что это произойдет раньше, чем запланированное время, хотя реализация Linux ждет его, прежде чем вернуться.
Более того, вызов sync несколько раз подряд не сильно замедлит работу системы, как если бы кэш-память очищалась, если ни один процесс не выполняет активную запись в файлы, кеш-память пуста, поэтому синхронизация невозможна.
Если вы действительно хотите запретить пользователям запускать синхронизацию в вашей системе, вы можете просто выполнить следующие команды:
Это было бы в значительной степени незамеченным для пользователей и не имело бы негативных последствий, за исключением тех, кто просто запускал синхронизацию, затем удалял устройства хранения (например, usb thumbdrive), не отключая их, но эти пользователи в любом случае уже действовали глупо.
Обратите внимание, что я бы не рекомендовал предыдущую ссылку / bin / sync с / bin / true.
sync
конечно полезно в некоторых случаях. Например, если вы опасаетесь, что в ближайшее время может произойти жестокое отключение (нехватка питания, системная паника, ...), это поможет сохранить содержимое файловых систем. Это то, что я называю законным запросом.источник
sync
делает бинарный файл - это вызываетsync()
функцию, поэтому (как сказал Бонси Скотт) вы действительно спрашиваете, почему ядро позволяет звонить непривилегированным пользователямsync()
umount
, что, независимо от операционной системы, всегда очищает буферы (если диск не ушел ...) вместо того,sync
чтобы гарантировать, что это не гарантируется в зависимости от операционной системы. Обратите внимание, что Linuxsync
ждет, пока сброс будет эффективным, поэтому ему тоже можно доверять.sync
не может причинить вред системе. Это может замедлить его, но не более, чем запуск программ, обращающихся к диску. Почему это должно быть ограничено?Есть веская причина разрешить запуск любого пользователя
sync
. Это необходимо, если некоторые операции должны выполняться по порядку, даже если система выходит из строя или теряет питание. Например, рассмотрим агент передачи почты, который получает электронную почту. Как только он записывает файл, содержащий электронное письмо, в спул, он вызываетsync
, и только тогда он отвечает отправляющему устройству, уведомляя его о том, что электронное письмо было получено. Если он не позвонилsync
, и принимающее устройство потеряло питание сразу после отправки уведомления о приеме, но до передачи файла на диск, электронная почта будет потеряна.Операционные системы задерживают запись на диск для эффективности. Они не могут знать, когда приложение действительно нуждается в записи. Таким образом, приложениям предоставляется способ указать операционной системе писать сейчас, с
sync(1)
иsync(2)
иfsync(2)
.источник