web-dev-qa-db-ja.com

「スワップヘッダーの読み取りに失敗しました:成功」とはどういう意味ですか?

Arch Linuxをインストールしようとしています(2014-04-01スナップショットから)。スワップファイルを作成してswaponしようとしましたが、理解できないエラー(?)メッセージが表示されました。

私は実行しました

fallocate -l 512M /mnt/sda2/swapfile
chmod 600 /mnt/sda2/swapfile
swapon /mnt/sda2/swapfile

そして出力は

swapon: /mnt/sda2/swapfile: read swap header failed: Success

そして、私が持っています :(コマンドラインの最後に。それで、それは成功したのか失敗したのか?これはスワップファイルを設定する方法ではありませんか?

9
Adam R. Grey

これはスワップファイルを設定する方法ではありませんか?

chmodswaponの間のステップを逃したと思います。

_mkswap /mnt/sda2/swapfile
_

オキシモロミックエラーは...

swapon:/ mnt/sda2/swapfile:スワップヘッダーの読み取りに失敗しました:成功

これが文字通り意味するのは、swaponコードにバグがあるということですが、必ずしもその主要な機能に関連するものではありません。

Cライブラリ関数は、エラーコードを格納するグローバル変数 errno をよく使用します。関数自体は、発生したエラー(エラー)を示す値を返し、そのエラーの正確な性質はerrnoに格納されます。エラーの兆候があった場合は、errnoの値をチェックして、エラーの内容を正確に確認できるという考え方です。

Errno値(整数)を取得し、それに関連する人間の言語の文字列を返すstrerror()ライブラリ関数もあります。それらの1つはSuccessであり、これは0のエラーコードに対応します(つまり、エラーなし)。

したがって、このようなものが表示された場合は、次のような間違いを示しています。

  • エラーを取得し、裏でerrnoを0にリセットする別の関数を(正常に)呼び出し、次にerrnoを使用して、2番目の関数を呼び出す前に取得したエラーの詳細を特定します。

および/または

  • ある時点でerrnoの値が割り当てられているはずの変数をstrerror()に渡すと(前の間違いが起こらないようにするため)、そうではありませんでした。
18
goldilocks