Статья не сравнивает запись в файл через файловую систему и не приводит к тому же файлу через необработанный доступ к блочному устройству, но сравнивает некоторые факторы, такие как целостность данных и скорость, когда операция write
выполняется в обычный файл, используя файловую систему, по сравнению с write
, выполняемым на блочном устройстве. Он не открывает тот же файл, используя оба метода. Фактически, написание обычного файла отличается от записи на блок-устройство. Это то, как Linux предоставляет устройства, которые позволяют использовать один и тот же системный вызов с той же семантикой, но с разными устройствами. Точно так же fprintf()
делает для печати на консоль, или на принтер, или на последовательный порт, или на файл: та же функция, одна и та же семантика, только один аргумент указывает назначение.
Как показано в статье, операция write
через файловую систему обычно выполняется быстрее (пользователю), так как системный вызов возвращается до фактической записи на диск. Это означает, что существует (как правило, небольшое) количество времени, в течение которого что-то, что должно быть написано, еще не написано, поэтому потеря электроэнергии может привести к потере данных. С другой стороны, запись на блок-устройство обеспечивает целостность данных, и поэтому системный вызов возвращается после того, как данные фактически записаны на диск (или в кэш этого диска)
Как вы имеете в виду «тот же файл»? – Arkadiy
Я так полагаю, потому что статья говорит о целостности данных и пропускной способности, похоже на сравнение чтения/записи нормальных данных (следовательно, файла). Хотя на самом деле мы не можем делать ничего полезного при открытии жесткого диска в качестве блочного устройства. – dragon135