Sync

sync — утилита Unix, предназначенная для обновления файловых систем и для синхронизации данных на диске с данными в памяти[1]. При этом выполняется системный вызов sync, который вызывает запись всех буферизованных изменений метаданных файлов и данных в базовые файловые системы. Он гарантирует, что все, что хранилось в памяти, будет записано на диск, предотвращая потерю данных, хранящихся в кеше, при аварийном завершении работы.

Также существует связный системный вызов int fsync(int fildes), запрашивающий передачу всех данных для дескриптора открытого файла с именем fildes к устройству хранения, связанному с файлом, описанным fildes .

Описание

   sync [--help] [--version]

Утилита sync инициирует сброс менеджером файловой системы из оперативной памяти всех измененных индексных дескрипторов и всех незаписанных системных буферов на диск. При этом обеспечивается сохранение всех изменений в файлах на этот запланированный момент. sync сперва записывает индексные дескрипторы (inode) в буферы и затем буферы на диск[2]

В Linux sync всего-лишь гарантирует, что будет составлен список «грязных» блоков, которые нужно записать. Прежде чем они действительно будут записаны, пройдет еще некоторое время. Команды reboot и halt учитывают это, делая паузу в несколько секунд после вызова

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

Операция sync расходует незначительный объем ресурсов CPU. Помимо этого, у нее есть следующие преимущества[3]:

  • Компактная запись данных.
  • Запись по крайней мере 28 КБ системных данных, даже если с момента предыдущего вызова sync не было выполнено ни одной операции ввода-вывода.
  • Ускорение записи данных на диск за счет отключения алгоритма отложенной записи. Это свойство особенно важно для тех программ, в которых после каждой операции записи выполняется операция fsync().
  • Создание при вызове sync() или fsync() записей в протоколе JFS о том, что измененные данные сохранены на диске.

Баги

Возврат из системного вызова sync, который вызывает одноимённая утилита, может произойти перед тем как запись будет фактически завершена. Однако, начиная с версии 1.3.30, Linux выполняет ожидание окончания записи, что, однако, не гарантирует целостность данных: современные диски имеют свои собственные большие кэши.[2]

См. также

Примечания

Ссылки

Content Disclaimer

Informasi ini disarikan dari Wikipedia dan disajikan kembali untuk tujuan edukasi. Konten tersedia di bawah lisensi CC BY-SA 3.0. Kami tidak bertanggung jawab atas ketidakakuratan data yang bersumber dari kontribusi publik tersebut.

  1. The information displayed on this website is sourced in part or in whole from Wikipedia and has been adapted for the purpose of restating it. We strive to provide accurate and relevant information, however:
  2. There is no guarantee of absolute accuracy. Wikipedia is an open, collaborative project that can be edited by anyone, so information is subject to change.
  3. It is not intended to constitute professional advice. The content displayed is for informational and educational purposes only. For important decisions (e.g., medical, legal, or financial), please consult a professional.
  4. Content copyright. Wikipedia is licensed under the Creative Commons Attribution-ShareAlike License (CC BY-SA). This means that content may be reused with appropriate attribution and shared under a similar license.
  5. Responsible use. Any risk arising from the use of information from this website is entirely the responsibility of the user.