OpenSolarisからファイルを削除すると、デバイスにスペースがありません。

OpenSolarisからファイルを削除すると、デバイスにスペースがありません。

NFS共有をマウントしてみてください(次からインディアナオープンサーバー) クライアントマシンでOIサーバーがクラッシュしました。ログダンプのように見える黒い死画面が表示された後、システムが再起動します。回復されておらず、起動を停止した後、次のエラーメッセージが表示されました。

svc.startd[9] Could not log for svc:/network/dns/mulitcast:default: write(30) failed with No space left on device?

私のブートドライブにはOS以外には何もありません...ドライブに何がいっぱいになるのかわかりません。おそらくどのようなログファイルですか?とにかく何も削除できないようです。何でも削除しようとすると、スペースなしエラーが発生します。

$ rm filename
cannot remove 'filename' : No space left on device 

メンテナンスモードにログインできますが、標準ユーザープロンプトにはログインできません。

出力はdf次のとおりです

rpool/ROOT/openindiana-baseline    4133493    4133493          0    100%   /
swap                              83097900      11028  830386872      1%   /etc/svc/volatile
/usr/lib/libc/libc_hwcap1.so.1     4133493    4133493          0    100%   /lib/libc.so.1

出力はmount次のとおりです

/ on rpool/ROOT/openindiana-baseline read/write/setuid/devices/dev:2d9002 on Wed Dec 31 16:00:00 1969
/devices on /devices read/write/setuid/devices/dev:8b40000 on Fri Jul 8 14:56:54 2011
/dev on /dev read/write/setuid/devices/dev:8b80000 on Fri Jul 8 14:56:54 2011
/system/contract on ctfs read/write/setuid/devices/dev:8c40001 on Fri Jul 8 14:56:54 2011
/proc on proc read/write/setuid/devices/dev:8bc0000 on Fri Jul 8 14:56:54 2011
/etc/mnttab on mnttab read/write/setuid/devices/dev:8c80001 on Fri Jul 8 14:56:54 2011
/etc/svc/volatile on swap read/write/setuid/devices/xattr/dev:8cc0001 on Fri Ju8 14:56:54 2011
/system/object on objfs read/write/setuid/devices/dev:8d00001 on Fri Jul 8 14:6:54 2011
/etc/dfs/sharetab on sharefs read/write/setuid/devices/dev:8d40001 on Fri Jul 14:56:54 2011
/lib/libc.s0.1 on /usr/lib/libc/libc_hucap1.s0.1 read/write/setuid/devices/dev:d90002 on Fri Jul 8 14:57:06 2011 

「zfs list -t all」の出力は次のようになります。

rpool                                                       36.4G   0       47.5K   /rpool
rpool/ROOT                                                  4.23G   0         31K   legacy
rpool/ROOT/openindiana                                      57.5M   0       3.99G   /
rpool/ROOT/openindiana-baseline                             61K     0       3.94G   /
rpoo1/ROOT/openindiana-system-edge                          4.17G   0       3.98G   /
rpool/ROOT/openindiana-system-edge@install                  19.9M   -       3 38G   -
rpoo1/ROOT/openindiana-system-edge@2011-07-06-20:45:08      73.1M   -       3.57G   -
rpoo1/ROOT/openindiana-system-edge@2011-07-06-20:48:53      75.9M   -       3 82G   -
rpoo1/ROOT/openindiana-system-edge@2011-07-07-02:14:04      61K     -       3.94G   -
rpoo1/ROOT/openindiana-system-edge@2011-07-07-02:15:14      61K     -       3.94G   -
rpoo1/ROOT/openindiana-system-edge@2011-07-07-02:28:14      61K     -       3.94G   -
rpool/ROOT/openindiana-system-stable                        61K     0       3.94G   /
rpoo1/ROOT/pre_first_update_07.06                           108K    0       3 82G   /
rpool/ROOT/pre_second_update_07.06                          90K     0       3.57G   /
rpool/dump                                                  9.07G   0       9.07G   -
rpool/export                                                3.85G   0       32K     /export
rpool/export/home                                           3.85G   0       32K     /export/home
rpool/export/home/admin                                     3.85G   0       3.85G   /export/home/admin
rpool/swap                                                  19.3G   19.1G   126M    -

答え1

ああ、変ですね…ファイルを削除するスペースが足りません!

これはすべてのファイルシステムで発生する可能性がありますが、ZFSでは比較的一般的な問題であることがわかりました。持つ スナップ写真

削除するファイルがスナップショットにまだ存在するという説明です。したがって、削除してもコンテンツはまだ存在し(スナップショットのみ)、システムはスナップショットにファイルがあったが現在の状態にはないという情報をさらに記録する必要があります。追加情報に十分なスペースがありません。

短期的な回避策は、最新のスナップショット以降に作成されたファイルを見つけて削除することです。もう1つの方法は、最新のスナップショットの後に添付されたファイルを見つけて、最新のスナップショットの時点でサイズに切り捨てることです。ログにスパムが発生してディスクがいっぱいになったら、最大のログファイルを切り取ります。

より一般的な修正は、一部のスナップショットを削除することです。リストスナップショットを使用できますzfs list -t snapshot。特定のスナップショットを削除すると、そのスナップショットがどのくらいのスペースを取り戻すかを予測する簡単な方法はないようです。スナップショットに保存されているデータが他のスナップショットに必要になる可能性があるため、そのスナップショットを削除してもデータはそのまま残ります。したがって、必要に応じてデータを別のディスクにバックアップし、不要になったスナップショットを識別してから実行しますzfs destroy name/of/snap@shot

この問題に関する広範な議論があります。このOpenSolarisフォーラムのトピック

答え2

これは、書き込み中のコピーファイルシステムのよく知られた問題です。ファイルを削除するには、ファイルシステムが最初にブロックを割り当てて新しい状態を回復するまで、削除されたファイルに含まれている多くのスペースを解放できます。ファイル。

(これはいいえ書き込み中にコピーに加えてスナップショットを実装する他の方法があるため、スナップショットがあるファイルシステムに問題があります。

問題から抜け出す方法:

  • スナップショットの公開(存在する場合...)
  • プール拡張(割り当てが残っている場合)
  • プール内の他のファイルシステムを削除した後の圧縮ファイルシステムの拡張
  • ファイルを切り取り、削除します。 (たとえタイトに絞り込んで、そうすることはできませんが、ZFS議論のスレッド)
  • ファイルの関連付けを解除します。 (同じ上記と)

私は数年前に同じ落とし穴に陥りましたが、私を救うための投稿可能なスナップショットはありませんでした。スレッドビューZFS議論この問題は深く議論された。

答え3

4.Z3G(rpool / root USED列)が疑わしいです。

とにかく、rpool/export/home/adminが大きすぎる場合(3.85GB)が根本的な原因である可能性があります。内容を確認し、不要なファイルを削除してください。管理対象ファイルシステムにはスナップショットがないため、プール内の一部のスペースをすぐに解放する必要があります。

答え4

私はこれを持っていて、何が必要かを理解しようとしばらく時間を費やしました。私の解決策は、ファイルを削除する前にファイルスペースをゼロにすることでした。

時々奇妙に動作し、ディスクをコアファイル(数字で終わるファイル)で埋めるいくつかの誤動作するプロセスがあるため、コピーを保持するためにこのようなスクリプトを作成しました。

for file in core*[0-9]
do
    coreFile=${file%.[0-9]*}

    mv $file $coreFile
    if [[ $? == 0 ]]
    then
        chmod 644 $coreFile
    else
        truncate -s 0 $file # we can't just delete if disk is full so zero out first
        rm $file
    fi
done

スクリプトを実行するとエラーが発生します。

mv: cannot rename core.200000 to core: No space left on device

ファイルを消去できます。

これをテストするために、ディスクに次の項目を記入しました。

for ((ii=0; ii<100000; ii++))
do
    mkfile 1m core.$ii
done

関連情報