Чи потрібне виконання синхронізації (8) перед тим, як вимкнути Linux?


19

Я все ще бачу, як люди рекомендують використовувати 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.

Я маю рацію чи мені пощастило в декількох тисячах відключень системи?


А як щодо перекомплектування файлової системи зчитування лише для читання / запису? Я встановив rootfs як readonly, і перераховую його як read / write за допомогою цієї команди: mount -o remount, rw /, а потім, коли я змінив rootfs, я запускаю mount -o remount, ro /, але я бачу деякі проблеми, коли перевіряю fs з fsck. Чи зателефонує друга команда SYNC перед монтажем як прочитаний?

Відповіді:


18

Причина, з якої люди бігали б sync; syncперед haltтим, що haltкоманда не закриває систему чисто на старих Linux. Правильний спосіб зробити це в системах SYSVr4 завжди полягає в тому, щоб сказати init перейти на інший рівень запуску.

BSD і SunOS 4 не є операційними системами SYSVr4, тому вони відрізняються. Solaris (SunOS 5) є SYSVr4, а Linux вибирає біти стандарту SYSVr4, які він хоче використовувати.

Використання halt - це насправді досить поганий спосіб зробити це на більшості UNIXes (Linux є одним з винятків), оскільки він насправді не виконує скрипти init, щоб виконувати такі дії, як зупинка процесів та демонтування дисків - це просто зупиняє процесор.

Якщо ви можете гарантувати, що ви ніколи не будете користуватися будь-якою системою UNIX, ніж Linux, тоді ви можете продовжувати використовувати halt- якщо є шанс, що ви збираєтесь використовувати інші UNIX, тоді я рекомендую перейти до звички використовувати init _runlevel_або shutdown.

shutdownКоманда на насправді говорить initпроцес , щоб змінити його рівень запуску рівня запуску - при цьому ініціалізації потім переходить запустити кожен з K * скриптів ініціалізації та S * скриптів ініціалізації , пов'язані з цим рівнем виконання. Один із скриптів рівня 0 запуску виконує демонтаж файлових систем.

У Linux haltкоманда просто викликає shutdownкоманду, якщо рівень запуску вже не дорівнює 0 (вимкнення) або 6 (перезавантаження) у будь-якому разі ; тому ніяких втрат немає.

Акт демонтажу файлової системи за допомогою umountсинхронізує дані на диску до того, як він їх відключить.

Якщо ви працювали sync; sync; haltв Linux, ви будете гаразд зі станом файлової системи, тому що розробники переконалися, що haltце робить правильно ; однак правильніше буде використовувати:shutdown now


Дякую за пояснення. Просто для уточнення того, що ви говорите - "розробники переконалися, що зупинка робить все правильно", означає, що "зупиняти" викликає "синхронізацію" теж або, що він працює належними сценаріями init, які зрештою викликають "синхронізацію"? А як бути вже в режимі однокористування і просто викликати "зупинити"? Чи правильно я вважаю, що ядро Linux достатньо розумне, щоб не реально вимикатися, але відключить усі файлові системи перед тим, як вимкнутись?
Амос Шапіра

1
haltдзвінки, shutdownвиклики umountяких виконує синхронізацію.
DaveG

Дякую DaveG. Отже, що ви говорите, це те, що все відбувається на рівні користувача, і ядро ​​не зможе перенаправляти та синхронізувати файлові системи самостійно? У будь-якому випадку це звучить як церемонія "синхронізація; вимкнення" сьогодні є зайвою.
Амос Шапіра

7

Використання декількох syncдзвінків полягало в тому, щоб дозволити ОС і дискам час очистити черги запису. "sync; sync; sync"не вважався таким корисним; один зробив, "sync<cr> sync<cr> sync<cr"і затримка, поки ваш ASR-33 зробив перевезення вантажів / новий рядок, забезпечив достатню затримку. Halt завжди робив синхронізацію дзвінків; питання полягало в тому, чи не буде достатньо часу для вимивання черг, перш ніж живлення буде знято.

Оригінальний плакат sync; sleep 30більше відповідає тому, що було призначено.


7

Я можу лише поговорити, чому ви видавали б syncкілька разів. Команда планує флеш-диск на диску, але повертається до того, як завершиться фактичний флеш. Будь-яка наступна syncкоманда буде заблокована до тих пір, поки не буде виконано будь-який невирішений флеш, перш ніж планувати черговий флеш та вихід. Тому sync; syncзабезпечує синхронний змив. Не потрібно робити це більше 2 разів, а також не вносити sleepв суміш.


5

Ті з вас, хто каже нам, що "синхронізація; синхронізація; синхронізація" не має мети, розкривають ваш вік.

Ще в добрі дні, перш ніж Unix був чимось для підлітків, ми звикли використовувати TAPE для наших потокових / резервних копій. Часто ми монтуємо стрічкову файлову систему для передачі резервних копій тощо. Ця довга тонка смужка магнітопластикової стрічки - це все, що деякі з нас мали, щоб зберігати наші файли на ..

Команда 'синхронізація; синхронізація; синхронізація' була таким чином, щоб цим старим магнітофонам можна було сказати, щоб перемотати себе до кінця (до вимкнення) - у них на борту була вбудована програма, яка б отримувала cmd синхронізації (як і всі хороші файлові системи) do), і якщо за ним майже одразу слідували ще дві команди буфера синхронізації, сам накопичувач інтерпретуватиме це як «перемотати стрічку та відключити її». Не було жодного способу сказати стрічковому накопичувачу перемотатись поза цим методом, і він начебто застряг. Ця звичка потім перейшла до слова, коли жорсткі диски стали доступнішими - нам старі короткі оператори не просто переробляють ( ) нашу м’язову пам’ять ви знаєте! Я вважаю, що він досяг статусу фольклору незабаром після того, як стрічки стали менш поширеними, а жорсткі диски стали доступнішими, але він все ще має користь для тих, хто з нас із стрічковими накопичувачами.


3
Стрічки - це символьні пристрої. "mount" працює на блокових пристроях. Я був там (запускав "дамп" на Vax 11/750 з BSD 4.2 в середині 80-х), і такого не було, і на стрічковому пристрої не було запущено "синхронізацію". Стрічка буде автоматично перемотана, якби ви відкрили її як одне ім’я пристрою і залишилися там, де вона була, якщо ви відкриєте її з іншим, і ви можете надсилати явні команди, використовуючи "mt", якщо потрібно.
Амос Шапіра
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.