Как очистить кеш жесткого диска и флеш-диска (или файловой системы) из командной строки?

Я пишу резервную копию script, которая

  • Копирует данные на резервный диск.
  • Сбрасывает резервный диск.
  • Выполняет проверку целостности хеша.

До того, как я сделал sleep(60) для ожидания в минуту, чтобы данные автоматически были сброшены ядром. Который, я думаю, перебор, поэтому теперь я пытаюсь sudo hdparm -F --verbose /dev/disk, но он сообщает об ошибке - HDIO_DRIVE_CMD(flushcache) failed: Invalid exchange несколько раз.

Мне интересно, есть ли стандартный способ сбросить кеш на жесткий диск. Я думаю, что есть, потому что usb-creator-gtk делает это, umount делает это.

Я использую Ubuntu x64 9.10

PS: Я пытаюсь избежать "синхронизации" , потому что эта страница говорит, что она небезопасна. http://ubuntuforums.org/showthread.php?t=589975

Ответы

Ответ 1

Достаточно ли sync?

Изменить: относительно вашего редактирования - вы пытаетесь избежать синхронизации, потому что какой-то парень в Интернете положил отказ от CYA на свой пост? Возможно, что-то не так с синхронизацией, о которой я не знаю, но это может стоить 2-го поста в себе.

Тем не менее, с информационных страниц linux:

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

Ответ 2

Вы хотите вызвать функциональный вызов fsync (man section 2), но если вы делаете это в script, вы, вероятно, захотите использовать команду sync (man section 8), которая просто вызывает sync().