Всё дело в файловой системе FAT.
(и в том, что Windows - поделка, извините)
Windows 90х - начала 20х в принципе была довольно рыхлой (но очень душевной).
Накопители того времени были довольно медленными, запись на диск была отложенной - активно использовался "кэш записи", данные первично сохранялись в оперативную память и на диск записывались с изрядной задержкой. Это позволяло серезно ускорить работу, но создавало риски: если выключить питание до полной синхронизации, данные терялись, файловая система повреждалась.
Для корректного выключения Windows сначала завершала все процессы, затем сбрасывала данные на диск (flush), потом синхронизировала файловую систему и размонтировала тома. Любое прерывание могло оставить её в несогласованном состоянии.
FAT - крайне простая файловая система; хороша для флэшек, microSD-карт, где и здравствует. Но для операционной системы ее возможностей откровенно недостаточно. Ключевое - нет журналирования. Можно было бы компенсировать архитектурой самой ОС и вниманием к деталям, но и с этим были серьезные проблемы. Современные Windows работают на NTFS, что интересным образом соотносится с Windows NT (2000) - переосмысленной и переделанной ревизией всей Windows, после чего она смогла стать в общем-то "production ready" для бизнеса. И там и там "NT" - New Technology, переписали и ядро и файловую систему (а это ж еще надо и про OS/2 здесь писать, ох, ну это потом отдельно), одно без другого не сработало бы.
Windows и сегодня любит че то попроверять попересчитывать своим FSCK при выключении и запуске, но в целом замена ФС проблему решила и мы больше не ждём разрешения выключить компьютер.
Была ли такая проблема в UNIX системах?
Удивительно, но нет. Журналируемые файловые системы в UNIX появились в 90х, но с самого начала, с 1970х и файловая система и ядро писались с учетом того, что питание в любое мгновение может пропасть. Решала архитектура: метаданные, inode и суперблоки писались синхронно, фиксировалось "намерение о записи", далее формировались рассчеты для экстренного восстановления и лишь затем через несколько служебных циклов сами данные физически доезжали до сброса. И получалось, что потеря питания также могла приводить к потере данных, но система была к этому готова и заранее всё вычисляла для эффективного восстановления. С появлением ext-fs возможности систем по контролю целостности и восстановления конечно многократно усилились.
Первые такие ФС появились на AIX (IBM UNIX): JFS (1990) и Slaris: VxFS (1991).
Linux, создаваймый в те года, начал свой путь сразу на журналируемых ФС.
Почему Windows потербовалось 10 лет чтобы перенять этот опыт - загадка.
Ну а венцом "умных" и "отказоустойчивых" ФС стала ZFS, где математики и вычислений столько, что сама она без оперативной памяти работать не может, хе-хе, иронично. О ней тоже как-нибудь отдельно.
Post #134
18