Solaris - Синхронный сброс диска/синхронная синхронизация?

Каков наилучший способ выполнить синхронную очистку диска в Solaris? Я хочу сбросить весь диск, а не один файл.

Sync() в Solaris (в отличие от Linux) работает АСИНХРОННО, я ищу СИНХРОННУЮ sync() (возврат после выполнения)

Вытекающий вопрос: как проверить правильность синхронизации? Как я могу написать тест, показывающий, что это сделано?

Спасибо!


person Michal    schedule 06.11.2012    source источник


Ответы (1)


Вы можете запустить:

/usr/sbin/lockfs -af

Цитирование справочной страницы lockfs:

-f

     Force a synchronous flush of all data that is  dirty  at
     the  time  fsflush  is  run to its backing store for the
     named file system (or for all file systems.)

     It is a more reliable method than using sync(1M) because
     it  does  not  return  until  all possible data has been
     pushed.

Если вы хотите сделать это исключительно на C, вы можете использовать

  #include <sys/filio.h>
  ...    
  ioctl(fd, _FIOFFS, NULL);

где fd — файловый дескриптор точки монтирования файловой системы (из /etc/mtab).

Помните, что _FIOFFS — это частный интерфейс, поэтому он может исчезнуть в любой момент без предварительного уведомления. Полностью поддерживаемый и более надежный способ — просто добавить строку system("/usr/sbin/lockfs -af"); в ваш код.

person jlliagre    schedule 28.03.2013