Я все ще бачу, як люди рекомендують використовувати sync; sync; sync; sleep 30; halt
інкубації, коли говорять про вимкнення або перезавантаження Linux.
Я працював Linux з моменту його створення, і хоча це була рекомендована процедура в BSD 4.2 / 4.3 та SunOS 4 дні, я не можу згадати, що мені довелося це робити принаймні протягом останніх десяти років, протягом яких я, ймовірно, проходили через відключення / перезавантаження Linux, можливо, тисячі разів.
Я підозрюю, що це анахронізм з тих часів, коли ядро не могло відключити та синхронізувати кореневу файлову систему та інші критичні файлові системи, необхідні навіть у режимі однокористування (наприклад, / tmp), і тому потрібно було явно сказати про те стільки даних, скільки можна на диску.
У ці дні, не знаходячи ще відповідного коду у джерелі ядра (копаючись через http://lxr.linux.no та google), я підозрюю, що ядро досить розумне, щоб чітко відключити навіть кореневу файлову систему, а файлова система досить розумна. ефективно робити синхронізацію (2) перед тим, як відключити себе під час нормального shutdown
/ reboot
/ poweorff
.
Це "sync; sync; sync"
потрібно лише в крайніх випадках, коли файлова система не відключиться чисто (наприклад, поломка фізичного диска) або система перебуває в стані, що лише примусові прямі перезавантаження (8) витягнуть її з морозу (наприклад, завантаження занадто високо, щоб дозволити планувати команду відключення).
Я також ніколи не роблю sync
процедуру перед демонтажем знімних пристроїв і ніколи не стикаюся з проблемою.
Інший приклад - Xen дозволяє DomU надсилати shutdown
команду з Dom0, це вважається "чистим відключенням", без того, щоб хто-небудь спочатку входив і вводив магію sync; sync; sync
.
Я маю рацію чи мені пощастило в декількох тисячах відключень системи?