Intereting Posts
Bash не читает (источник) .bashrc в AIX Сохранение подзаголовка в фоновом режиме shell: объединение точек с запятой и амперсанда в bash / sh Как установить изображение qcow2 Могу ли я изменить, как работает автозаполнение zsh? Как переходить на виртуальный IP-адрес в качестве шлюза Как запретить приложения Qt использовать тему GTK + Bash: условная новая строка в PS1 ломает typeahead Повторно получить доступ к тому NFS из клиента OS X Mavericks после перезагрузки сервера? Запуск кода uinput на плате DM368 Как я могу определить, какой из моих портов я скомпилировал и который я установил из предварительно скомпилированных бинарных пакетов? Bash: Как создать псевдоним в .bashrc для awk с параметрами Как скопировать установленную библиотеку на удаленный хост Linux Что значит `. / path / command` do? (Пространство после точки, абсолютный путь) Как я могу установить пакет bash в OpenWrt без доступа к Интернету?

В какой ситуации файл записывается в блок-устройство во время umount?

У меня есть карта памяти с флэш-памятью, обнаруженная как блок-устройство /dev/sdb . Он имеет один раздел FAT16. Теперь, если я смонтирую файловую систему FAT16, напишите что-нибудь в файловой системе и umount файловой системы, тогда фактическая запись файла происходит во время umount :

 # mount | grep sdb /dev/sdb1 on /media type vfat (rw) # time cp image.bin /media/ real 0m0.179s user 0m0.000s sys 0m0.104s # time umount /media real 0m18.185s user 0m0.004s sys 0m0.032s # 

Я видел подобное поведение с флеш-памятью USB. Что определяет, будет ли файл записываться в файловую систему сразу или во время отсоединения файловой системы?

Ядро хранит данные в кэше в памяти, чтение данных имеет решающее значение (кто-то его ждет), запись может выполняться лениво (никто не спешит, данные просто могут быть снова использованы / изменены заново). Поскольку устройства могут считывать или записывать одновременно, он рассчитывает отложить запись как можно больше. Таким образом, данные записываются «добровольно» ядром только в том случае, если нет выхода (нужно место сейчас ). Вы можете заставить руку ядра открывать файлы синхронно (пишите, как только что-то меняется), вызывая fsync(2) в файле, чтобы вывести данные. Когда вы размонтируете устройство, очевидно, что все данные, кэшированные для него, должны быть записаны заранее.

Вышеупомянутое должно дать вам дрожь, так как машина может упасть в любой момент и оставить много неписаных данных. Вот почему есть программа под названием sync(1) , которая заставляет ядро ​​выписывать все данные кэшированного файла. Он обычно настроен так, что он периодически запускается (обычно каждые 5 секунд или около того), чтобы избежать потери данных, как описано. Вам нужно будет проверить документацию вашего дистрибутива о том, как именно это настраивается или настраивается.

Записи делаются сразу, если файл открыт синхронно, или файловая система, смонтированная с опцией синхронизации.

Обычно это плохо для общей производительности системы, поэтому это делается только тогда, когда критические данные должны быть привязаны к запоминающему устройству при возврате вызова для записи. Копирование файла не считается критическим, поэтому ядро ​​буферизует запись внутри и периодически очищает данные до носителя.

Вы можете попросить ОС сбросить все эти кеши с помощью команды sync