Linuxをシャットダウンする前にsync(8)の実行がまだ必要ですか?


19

sync; sync; sync; sleep 30; haltLinuxのシャットダウンや再起動について話すとき、人々が呪文の使用を推奨しているのを見ています。

私はLinuxを始めてから動かしてきました。これはBSD 4.2 / 4.3とSunOSの4日間で推奨される手順でしたが、少なくとも過去10年間は​​それをしなければならなかったことを思い出せません。 Linuxのシャットダウン/再起動を数千回行った。

これは、カーネルがシングルユーザーモード(/ tmpなど)でも必要なルートファイルシステムやその他の重要なファイルシステムをアンマウントおよび同期できなかったため、これは時代錯誤であると思われるため、明示的にフラッシュするように指示する必要がありましたディスクにできる限り多くのデータ。

最近では、カーネルソースで関連するコードをまだ見つけることなく(http://lxr.linux.noおよびgoogleを掘り下げて)、カーネルはルートファイルシステムを完全にアンマウントするのに十分スマートであり、ファイルシステムは十分スマートであると思われます通常のshutdown/ reboot/の間に自分自身をアンマウントする前に効果的にsync(2)を実行しpoweorffます。

これ"sync; sync; sync"は、ファイルシステムがクリーンにアンマウントされない(物理ディスク障害など)極端な場合、またはシステムが直接リブート(8)を強制するだけでフリーズが解除される状態(負荷が大きすぎるなど)の場合にのみ必要です。シャットダウンコマンドのスケジュールを設定するには、high)。

またsync、リムーバブルデバイスをアンマウントする前にこの手順を実行することも、問題が発生することもありません。

別の例-Xenでは、DomUにDom0からshutdownコマンドを送信できます。これは、sync; sync; sync最初にログインして魔法を入力する必要のない「クリーンシャットダウン」と見なされます。

私は正しいのですか、それとも数千のシステムのシャットダウンに幸運でしたか?


読み取り専用ファイルシステムを読み取り/書き込みとして再マウントするのはどうですか?rootfsを読み取り専用としてマウントし、次のコマンドで読み取り/書き込みとして再マウントします:mount -o remount、rw /そして、rootfsを変更したらmount -o remount、ro /を実行しますが、fsをチェックすると問題が発生しますfsckで。2番目のコマンドは、読み取り専用としてマウントする前にSYNCを呼び出しますか?

回答:


18

人々がsync; syncaの前に実行する理由haltは、haltコマンドが古いlinuxでシステムを完全にシャットダウンしないためです。SYSVr4システムでこれを行う正しい方法は、常にinitに別の実行レベルに移行するよう指示することです。

BSDとSunOS 4はSYSVr4オペレーティングシステムではないため、違いがあります。Solaris(SunOS 5)はSYSVr4であり、Linuxは使用したいSYSVr4標準の一部を選択します。

実際には、プロセスの停止やディスクのアンマウントなどを実行するためにinitスクリプトを実行しないため、ほとんどのUNIX(Linuxは例外の1つ)で停止を使用するのはかなり悪い方法です。プロセッサを停止するだけです。

あなたがだろうことを保証することができた場合は決して今まで、これまでLinux以外のUNIXシステムの任意の種類を使用しないで、あなたが使用し続けることができますhalt-あなたが他のUNIXを使用するつもり機会があるのならば、私が使用しての習慣になってお勧めしますinit _runlevel_shutdown

shutdownこのコマンドは、実際に告げるinitその実行レベルの変更するプロセスを実行レベルを -そうすることで、その後* initスクリプトとその実行レベルに関連付けられたS * initスクリプトKのそれぞれを実行するに進めるのinit。実行レベル0のスクリプトの1つは、ファイルシステムのアンマウントを実行します。

Linuxでは、実行レベルが既に0(シャットダウン)または6(リブート)である場合を除き、haltコマンドは単にコマンドを呼び出します。損失は​​ありません。shutdown

を使用してファイルシステムをumountアンマウントすると、アンマウントする前にデータがディスクに同期されます。

sync; sync; haltLinuxで実行している場合、ファイルシステムの状態に問題はありhaltません。開発者はそれが正しいことを確認しているためです。ただし、使用する方が適切です。shutdown now


説明してくれてありがとう。あなたが言っていることを明確にするために-「開発者は、停止が正しいことを確認した」とは、「停止」も「同期」を呼び出すか、最終的に「同期」を呼び出す適切な初期化スクリプトを実行することを意味しますか?すでにシングルユーザーモードで「停止」を呼び出している場合はどうですか?Linux カーネルは実際に突然シャットダウンしないほどスマートであるが、シャットダウンする前にすべてのファイルシステムをアンマウントするという仮定で正しいですか?
アモスシャピラ

1
haltコールshutdownコールumount同期を行います。
-DaveG

DaveGに感謝します。あなたが言っているのは、それはすべてユーザーレベルで行われ、カーネルはファイルシステムを単独でアンマウントおよび同期しないということですか?いずれにせよ、今日では「同期;シャットダウン」セレモニーは冗長なようです。
アモスシャピラ

7

複数のsync呼び出しの使用は、OSとディスクが書き込みキューをフラッシュする時間を確保することでした。 "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を使用する必要がありました。多くの場合、テープベースのファイルシステムをマウントして、バックアップのストリーミングなどを行います。この1枚の細長い磁気テープは、ファイルを保存するために私たちの一部でした。

'sync; sync; sync'コマンドは、これらの古いテープマシンに最後まで(シャットダウン前に)巻き戻すように指示する方法でした-彼らはボード上にsync cmdを受信するファームウェアがありました(すべての良いファイルシステムのように)また、ほぼ2つの同期バッファーコマンドがすぐに続いた場合、テープドライブ自体はこれを「テープを巻き戻してマウント解除する」と解釈します。この方法を超えてテープドライブに巻き戻すように指示する方法はありませんでした。そして、この習慣はハードドライブが利用可能になったときに言葉に移りました-私たちの無愛想な古いオペレーターは単にrealloc( )あなたの知っている筋肉の記憶!テープが一般的でなくなり、ハードドライブが利用可能になった直後に、民間伝承の地位を獲得したと思いますが、テープドライブを使用している私たちにとってはまだその用途があります。


3
テープはキャラクターデバイスです。「マウント」はブロックデバイスで動作します。私はそこにいました(80年代半ばにBSD 4.2でVax 11/750で「ダンプ」を実行しました)、そのようなことはなく、テープデバイスで「同期」を実行しました。テープを1つのデバイス名として開いた場合は自動的に巻き戻され、別のデバイス名で開いた場合はその場所にとどまり、必要な場合は「mt」を使用して明示的なコマンドを送信できます。
アモスシャピラ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.