401

毎日複数のユーザーがアクセスしているSambaドライブがいくつかあります。(SQLテーブルから)共有ドライブを認識し、すべてのユーザーがアクセスできる特別なディレクトリにマウントするためのコードがすでにあります。

SQLテーブルからドライブを削除した場合(事実上オフラインにする場合)、ビジー状態のデバイスをアンマウントする方法はありますか?これまでのところ、どのような形式でもumount機能しないことがわかりました。

データを破壊する可能性を無視して-現在読み取られているデバイスをアンマウントすることは可能ですか?

4

16 に答える 16

674

はい!! ビジー状態で強制的にアンマウントできない場合でも、ビジー状態のデバイスをすぐに切り離す方法があります。後ですべてクリーンアップできます。

umount -l /PATH/OF/BUSY-DEVICE
umount -f /PATH/OF/BUSY-NFS (NETWORK-FILE-SYSTEM)

注/注意

  1. これらのコマンドは、実行中のプロセスを中断したり、データを失ったり、開いているファイルを破損したりする可能性があります。ターゲットのDEVICE/NFSファイルにアクセスするプログラムは、エラーをスローしたり、強制的にアンマウントした後に正しく動作しなかったりする場合があります。
  2. マウントされたパス(フォルダ/ドライブ/デバイス)自体の内部では、上記のコマンドを実行しないでください。umountまず、コマンドを使用pwdして現在のディレクトリパス(マウントされたパスであってはなりません)を検証し、次にcdコマンドを使用してマウントされたパスから抜け出し、後で上記のコマンドを使用してマウントを解除します。
于 2013-11-14T04:17:32.083 に答える
188

可能であれば、ビジー状態のプロセスを特定/特定し、そのプロセスを強制終了してからunmount、samba共有/ドライブを実行して被害を最小限に抑えましょう。

  • lsof | grep '<mountpoint of /dev/sda1>'(またはマウントされたデバイスが何であれ)

  • pkill target_process(名前で忙しいprocを殺します| kill PID| killall target_process

  • umount /dev/sda1(またはマウントされたデバイスが何であれ)

于 2011-10-24T16:27:00.913 に答える
127

umountを実行するときは、マウントされたデバイスにまだいないことを確認してください。

于 2017-04-28T19:05:42.500 に答える
69

避けるumount -l

これを書いている時点で、投票数の多い回答では、を使用することを推奨してumount -lいます。

umount -l危険であるか、せいぜい危険です。要約すれば:

  • 実際にデバイスをアンマウントするのではなく、名前空間からファイルシステムを削除するだけです。開いているファイルへの書き込みは続行できます。
  • btrfsファイルシステムの破損を引き起こす可能性があります

回避策/代替

の便利な動作は、絶対umount -lパス名によるアクセスからファイルシステムを非表示にすることです。これにより、マウスポイントの使用を最小限に抑えることができます。

これと同じ動作は、マウント解除するディレクトリに対する権限000を持つ空のディレクトリをマウントすることで実現できます。

次に、マウントポイントの下にあるファイル名への新しいアクセスは、権限がゼロの新しくオーバーレイされたディレクトリにヒットします。これにより、マウント解除への新しいブロッカーが防止されます。

最初にしようremount,ro

ロックを解除する主なアンマウントの成果は、読み取り専用の再マウントです。バッジを取得すると、次のremount,roことがわかります。

  1. 保留中のデータはすべてディスクに書き込まれています
  2. 今後の書き込み試行はすべて失敗します
  3. デバイスを物理的に切断する必要がある場合、データは一貫した状態にあります。

mount -o remount,ro /dev/device 書き込み用に開いているファイルがある場合は失敗することが保証されているので、まっすぐに試してください。あなたは幸運な気分かもしれません、パンク!

運が悪い場合は、書き込み用に開いているファイルがあるプロセスのみに焦点を当ててください。

lsof +f -- /dev/<devicename> | awk 'NR==1 || $4~/[0-9]+[uw -]/'

その後、デバイスを読み取り専用で再マウントし、一貫した状態を確保できるはずです。

この時点で読み取り専用で再マウントできない場合は、ここにリストされている他の考えられる原因のいくつかを調査してください。

読み取り専用の再マウントアチーブメントのロックが解除されました☑</p>

おめでとうございます。マウントポイント上のデータは一貫性があり、将来の書き込みから保護されています。

なぜfuser劣るのかlsof

fuser早めに使ってみませんか?そうですね、 デバイスではなくディレクトリfuserを操作することもできます。そのため、ファイルの名前空間からマウントポイントを削除して引き続き使用する場合は、次のことを行う必要があります。fuser

  1. mount -o bind /media/hdd /mntマウントポイントを別の場所に一時的に複製します
  2. 元のマウントポイントを非表示にして、名前空間をブロックします。

方法は次のとおりです。

null_dir=$(sudo mktemp --directory --tmpdir empty.XXXXX")
sudo chmod 000 "$null_dir"

# A request to remount,ro will fail on a `-o bind,ro` duplicate if there are
# still files open for writing on the original as each mounted instance is
# checked.  https://unix.stackexchange.com/a/386570/143394
# So, avoid remount, and bind mount instead:
sudo mount -o bind,ro "$original" "$original_duplicate"

# Don't propagate/mirror the empty directory just about hide the original
sudo mount --make-private "$original_duplicate"

# Hide the original mountpoint
sudo mount -o bind,ro "$null_dir" "$original"

次に、次のようになります。

  1. 元の名前空間が非表示になっています(これ以上ファイルを開くことができず、問題が悪化することはありません)
  2. 実行する(デバイスではなく)重複したバインドマウントディレクトリfuser

これはより複雑です[1]が、以下を使用できます。

fuser -vmMkiw <mountpoint>

これは、書き込み用に開いているファイルでプロセスを強制終了するようにインタラクティブに要求します。もちろん、マウントポイントをまったく隠すことなくこれを行うことはできますが、上記の模倣umount -lは危険を伴うことはありません。

スイッチは-w書き込みプロセスに制限されており、-iインタラクティブであるため、読み取り専用の再マウント後、急いでいる場合は、次を使用できます。

fuser -vmMk <mountpoint>

マウントポイントの下で開いているファイルを使用して、残りのすべてのプロセスを強制終了します。

うまくいけば、この時点で、デバイスをアンマウントできます。(モードディレクトリを一番上にumountバインドマウントした場合は、マウントポイントで2回実行する必要があります。)000

または使用:

fuser -vmMki <mountpoint>

アンマウントをブロックしている残りの読み取り専用プロセスをインタラクティブに強制終了します。

くそー、私はまだ得ますtarget is busy

アンマウントブロッカーは、開いているファイルだけではありません。他の原因とその解決策については、ここここを参照してください。

デバイスを完全にアンマウントするのを妨げている潜んでいるグレムリンを持っている場合でも、少なくともファイルシステムは一貫した状態になっています。

次に、を使用lsof +f -- /dev/deviceして、ファイルシステムを含むデバイスでファイルが開いているすべてのプロセスを一覧表示し、それらを強制終了できます。


[1]使用するのはそれほど複雑ではありませんmount --moveが、mount --make-private /parent-mount-pointそれには影響があります。基本的に、マウントポイントがファイルシステムの下にマウントされている場合は、/これを回避する必要があります。

于 2019-09-26T16:41:39.350 に答える
47

次のことを試してください。ただし、実行する前に、フラグによって実行中のプロセスがすべて強制終了され、デバイスがビジー状態になっていることに注意してください。-k

-i旗は殺すfuser前に尋ねさせます。

fuser -kim /address  # kill any processes accessing file
unmount /address
于 2014-06-30T07:44:52.703 に答える
8

exportfs-vを使用してエクスポートされたNFSファイルシステムを確認します。見つかった場合は、exportfs -d share:/directoryを使用して削除します。これらはfuser/lsofリストに表示されず、umountの成功を妨げる可能性があります。

于 2014-04-20T15:02:16.973 に答える
6

チェックアウトumount2

Linux 2.1.116は、umount2()システムコールを追加しました。これは、umount()と同様に、ターゲットをアンマウントしますが、操作の動作を制御する追加のフラグを許可します。

MNT_FORCE(Linux 2.1.116以降)ビジー状態の場合でも強制的にアンマウントします。(NFSマウントの場合のみ。)MNT_DETACH(Linux 2.4.11以降)レイジーアンマウントを実行します。マウントポイントを新しいアクセスに使用できないようにし、マウントポイントがビジー状態でなくなったときに実際にアンマウントを実行します。MNT_EXPIRE(Linux 2.6.8以降)マウントポイントを期限切れとしてマークします。マウントポイントが現在使用されていない場合、このフラグを使用したumount2()の最初の呼び出しは、エラーEAGAINで失敗しますが、マウントポイントは期限切れとしてマークされます。マウントポイントは、どのプロセスからもアクセスされない限り、期限切れのままです。MNT_EXPIREを指定する2番目のumount2()呼び出しは、期限切れのマウントポイントをアンマウントします。このフラグは、MNT_FORCEまたはMNT_DETACHのいずれかで指定することはできません。戻り値

成功すると、ゼロが返されます。エラーの場合、-1が返され、errnoが適切に設定されます。

于 2011-10-24T16:26:42.203 に答える
6

誰かが同じpbを持っている場合に備えて。:

/mntchroot jailのマウントポイント(ここ)をアンマウントできませんでした。

調査するために入力したコマンドは次のとおりです。

$ umount /mnt
umount: /mnt: target is busy.
$ df -h | grep /mnt
/dev/mapper/VGTout-rootFS  4.8G  976M  3.6G  22% /mnt
$ fuser -vm /mnt/
                     USER        PID ACCESS COMMAND
/mnt:                root     kernel mount /mnt
$ lsof +f -- /dev/mapper/VGTout-rootFS
$

お気づきのように、何もlsof返しません。

それから私はこれをタイプする考えを持っていました:

$ df -ah | grep /mnt
/dev/mapper/VGTout-rootFS  4.8G  976M  3.6G  22% /mnt
dev                        2.9G     0  2.9G   0% /mnt/dev
$ umount /mnt/dev
$ umount /mnt
$ df -ah | grep /mnt
$

これは、chrootjailから内部のシステムを修復できるようにするために作成したものへの/mnt/devバインドでした。/dev

それをマウントした後、私のpb。これで解決されました。

于 2020-10-01T22:19:56.060 に答える
5

最近、gpartedでラベルを変更するために、同様にマウントを解除する必要がありました。

/ dev / sda1は、/ etc/fstabを介して/media/myusernameとしてマウントされていました。アンマウントの試行が失敗したとき、私はエラーを調査しました。最初に/dev/hda1にマウントポイントがあるデュアルパーティションサムドライブをアンマウントするのを忘れていました。

推奨どおりに「lsof」を試してみました。

$ sudo lsof | grep /dev/sda1

その出力は次のとおりです。

lsof:警告:stat()できませんfuse.gvfsd-ファイルシステム/ run / user / 1000/gvfsを融合します
出力情報が不完全である可能性があります。
lsof:警告:ファイルシステム/ run / user / 1000 / docをstat()融合できません
出力情報が不完全である可能性があります。

lsofが2つのヒューズ警告を発したので、私は/ run / user / 1000 / *をざっと見て、ファイルを開いているか、マウントポイント(またはその両方)が物事を妨害している可能性があると推測しました。

マウントポイントは/media/にあるので、次のコマンドで再試行しました。

$ sudo lsof | grep /media

同じ2つの警告ですが、今回は追加情報が返されました。

bash 4350 myusername cwd DIR 8,21 4096 1048577 / media
sudo 36302 root cwd DIR 8,21 4096 1048577 / media
grep 36303 myusername cwd DIR 8,21 4096 1048577 / media
lsof 36304 root cwd DIR 8,21 4096 1048577 / media
lsof 36305ルートcwdDIR8,21 4096 1048577 / media

まだ頭を悩ませていましたが、この時点で、USBポートからサムドライブが突き出ているのを思い出しました。たぶん、引っかき傷が助けになりました。

そこで、サムドライブのパーティションをアンマウントし(一方をアンマウントすると、もう一方が自動的にアンマウントされます)、サムドライブのプラグを安全に取り外しました。その後、/ dev / sda1をアンマウントし(何もマウントされていない状態で)、gpartedでラベルを付け直し、ドライブとサムドライブの両方を問題なく再マウントすることができました。
ベーコンが保存されました。

于 2021-03-16T08:11:48.787 に答える
4

ターミナルを使用していて、現在のディレクトリがアンマウントするパス内にある場合、エラーが発生するという人がいます。
補足として、この場合、lsof | grep path-to-be-unmounted以下の出力が必要です。

bash ... path-to-be-unmounted
于 2020-03-30T08:17:04.240 に答える
3

filesysemをアンマウントする前。ファイルシステムを保持または使用しているプロセスがあるかどうかを確認する必要があります。そのため、デバイスがビジーであるか、ファイルシステムが使用中であることが示されます。以下のコマンドを実行して、ファイルシステムで使用されているプロセスを確認します。

fuser -cu /local/mnt/

ファイルシステムを保持/使用しているプロセスの数が表示されます。

local/mnt: 1725e(root) 5645c(shasankarora)

ps -ef | grep 1725<->ps -ef | grep <pid>

kill -9 pid

すべてのプロセスを強制終了すると、パーティション/ビジーデバイスをアンマウントできます。

于 2021-12-08T17:52:38.643 に答える
2

何かが機能する場合のもう1つの方法は、編集、フラグ/etc/fstabの追加、およびマシンの再起動です。noautoデバイスはマウントされません。何かを終えたら、フラグを削除して再起動してください。

于 2018-05-31T07:55:04.340 に答える
2

ニッチな答え:

そのデバイスにzfsプールがある場合、少なくともファイルベースのプールの場合lsofは、使用状況は表示されません。しかし、あなたは単に実行することができます

sudo zpool export mypool

その後、マウントを解除します。

于 2020-05-17T06:35:32.597 に答える
1
sudo fusermount -u -z <mounted path>

注意:パスに補完を使用しないでください。これにより、ターミナルもフリーズします。

于 2021-09-20T13:34:28.703 に答える
0

フォルダ内の複数のマウント

追加の理由は、たとえば組み込みデバイス用のSDカードで作業した後など、プライマリマウントフォルダ内のセカンダリマウントである可能性があります。

# mount /dev/sdb2 /mnt       # root partition which contains /boot
# mount /dev/sdb1 /mnt/boot  # boot partition

/ mntのアンマウントは失敗します:

# umount /mnt
umount: /mnt: target is busy.

最初にブートフォルダをアンマウントし、次にルートをアンマウントする必要があります。

# umount /mnt/boot
# umount /mnt
于 2020-08-30T15:13:02.597 に答える
0

私の場合、AFP共有であるディレクトリにマウントされたパーティションをアンマウントできませんでした。(Apple bonjour / avahi mdnsの世界に共有)サーバー上のすべてのログインをホームディレクトリに移動しました。リモートで接続されているすべてのMacを他のディレクトリに移動しました。umount -fを使用してもパーティションをアンマウントできなかったため、サーバーでnetatalkデーモンを再起動しました。
(/etc/netatalk/afp.confには共有割り当てが含まれています)netatalkの再起動後、umountは-fなしで成功しました。

于 2022-01-28T07:06:25.010 に答える