LVMボリュームグループに移行するサーバーにディスクがあります。以前は、従来のDOSディスクパーティションhdb[1-5]
を使用していました。
すべてのファイルシステムをhdb
からアンマウントし、hdb
を使用してスワップをシャットオフし、デバイス上の小さいVGをすでに削除し、fdiskを使用してパーティションを再作成し、既存のパーティションを削除し、2つのパーティションを作成しました、しかしそれを書き出すと、Linuxはパーティションテーブルの再読み込みを拒否しました。 hdparm -z
レポートを使用して再試行します:BLKRRPART failed: Device or resource busy.
次の場所をチェックして、デバイスとそのパーティションがどこにもリストされていないことを確認しました。
しかし、cat /proc/partitions
はまだパーティションをリストし、hdparm -z /dev/hdb
はまだデバイスをビジーにします。
私が見逃しているもの、またはブロックデバイスにまだ保持されているものを見つけるためにまだ知らない秘密の場所はありますか?さらに重要なことに、パーティションテーブルをリロードできるように、保留を解除するにはどうすればよいですか?
FWIW、この特定のケースでは、心配することなくサーバーを再起動するだけで済みますが、これは以前に私を悩ませていました。もっと良い方法があるかどうか知りたいです。
(編集:より正確な表現を追加)(編集:詳細の再パーティション化)
更新:私はpartprobe /dev/hdb
を使用しましたが、状況が変わりました。/dev/ hdb1で、/ deb/hdb [3-5]がなくなり、partprobeがError: Error informing the kernel about modifications to partition /dev/hdb1 -- Device or resource busy.
<-特にhdb1について報告しています。 。 hdb1は、以前はLVMボリュームグループ(VG)の物理ボリューム(PV)でしたが、再パーティション化する前にvgremove + pvremovedemに隣接していました......
更新2:FWIW、私はまだこの問題を修正していません。幸い、緊急ではありません。 partprobeが新しいAPI呼び出しを使用していることを知りました。そのため、以前は何かを行っているように見えました。デバイスが与えられた場合、それがメジャー/マイナー番号であり、どのリソース(カーネルまたはユーザースペース)がそれを使用しているかを把握するための簡単で効果的な方法をまだ見つけていません。何か案は?
フューザーを使用してみてください
fuser -vam /dev/hdb1
Eddyのfuser -vam /dev/hdb1
の例は本質的に正しいものでしたが、完全性に欠けていました。私の場合、データを保持しているパーティションがLVMにあるraid1アレイの最後のドライブから誰かからファイルを回復しているときに、同様の問題が発生しました。
この場合、ドライブを調べるためにphotorec
を開始し、ボリュームグループがあることを確認してから、photorec
を実行しているターミナルを閉じました。私には知られていないが、photorec
はまだ/dev/mapper/vg0-lv0
を保持していた。したがって、将来的にはfuser
を使用してみてください。ただし、/dev/mapper/
の内容については
fuser -vam /dev/mapper/*
これはおそらく最善の答えではありませんが、使用しようとしているブロックデバイスに何らかの方法でマップされる可能性のある/ dev /の下のファイルをチェックすることを忘れないでください。
コマンドmount
の出力は何ですか。これがあなたの状況に当てはまるかどうかはわかりませんが、私は bind mounts を何度か使用したことがあります。バインドマウントからソースファイルシステムをアンマウントしても、バインドマウントはアンマウントされません。この場合、mountの出力は、何が起こっているのかを知らせるのにあまり役立ちません。
lsof
はあなたが探しているコマンドです。通常は、マウントポイントを使用してgrepにパイプする必要があります。
例lsof | grep var
は、パスまたはファイル名に「var」が含まれているファイルを開いているすべてのプロセスを一覧表示します