web-dev-qa-db-ja.com

ネットブックのスリープモード後の問題を修正するために、Ubuntuで強制的にアンマウントします

ここで実際に知っておく必要があるのは、デバイスがビジー状態のときに強制的にアンマウントする方法だけです。umount -fが機能しません。以下の説明は、誰かがより良い解決策を思いついた場合に備えて、これを行う必要がある理由の背景にすぎません。このアンマウントを行うことが不可能である場合は、理由の説明を喜んで受け入れます答えとして。

問題は、ネットブックをスリープモードにすると、マウントポイントが壊れてしまうことです。マウントはまだ存在しており、mountを実行すると通常どおり表示されます。

/dev/mmcblk0p1 on /home/ilari/storage type ext4 (rw,nosuid,nodev,uhelper=hal)

ただし、読み取り/書き込みを試みると、Input/output errorで失敗します。

開いているプログラムがある場合、デバイスをアンマウントしようとすると、次のように失敗します。

umount: /home/ilari/storage: device is busy

問題は、デバイス/dev/mmcblk0がスリープ中にシステムから消えたことにあるようです。しかし、これは奇妙なことが起こる場所です。以前のデバイスは引き続き使用できますが、現在は/dev/mmcblk1になっています。そして、同じポイントにもう一度マウントすることができます。これにより、mountの出力がかなり面白くなります。

/dev/mmcblk0p1 on /home/ilari/storage type ext4 (rw,nosuid,nodev,uhelper=hal)
/dev/mmcblk1p1 on /home/ilari/storage type ext4 (rw,nosuid,nodev,uhelper=hal)

これを行うと、マウントポイントはスリープ前と同じように機能します!開いていたプログラムは引き続き使用できます何も起こらなかったかのように、再びファイルシステム。

しかし、システムに複数の(故障した)デバイスを蓄積させることは、かなり大雑把に思えます。したがって、「新しい」デバイスを同じポイントに再マウントする前に、前のマウントポイントをアンマウントしたいと思います。

デバイスがビジーのときにアンマウントを強制するにはどうすればよいですか?できれば、ウェイクアップ時に自動的に、自動再マウントを使用します。 助けていただければ幸いです。

(もちろん、開いているすべてのプログラムを閉じてからマウントを解除することもできますが、それでもスリープモードの目的はほとんど無効になります。)

編集:コメントで述べたように、システムをアンマウントしてからスリープ状態にし、ウェイクアップ時に再マウントすることをお勧めします。実際、これにより、デバイスがインデックス番号を変更するのを阻止するように見えるため、/dev/mmcblk0のままになります。問題は、それを使用しているすべてのプログラムを閉じた後にのみマウントを解除できることです。 (これはスリープ後も機能することに注意してください。すべてのプログラムを閉じることで、いつでも壊れたポイントをアンマウントできます。)umount -fも役に立たず、追加のumount2: Device or resource busyで応答します。

Acer AspireOneでUbuntuNetbook Remix9.10を使用しています。マウントポイントは、ファイルシステムのUUIDによってfstabにあります(これが、デバイス名が変更されていても再マウントが機能する理由です)。当然、これに対する代替策は、デバイスがその番号を変更しないようにすることですが、それははるかに難しい問題になるのではないかと心配しています。

3
Ilari Kajaste

-fフラグをumountに試しましたか?

umount -f /home/ilari/storage

このようなことを自動的に行うには、/etc/pm/sleep.d/に小さなスクリプトが必要になります。ただし、寝るときはマウントを解除し、起床時に再度マウントすることをお勧めします。私は最近 良い答え を手に入れました。それはその小さなスクリプトを書くために何をすべきかを教えてくれるはずです。

3
innaM

umount -l /home/ilari/storage仕事?私はこれをテストするのに良いパーティションを本当に持っていませんが、それはあなたが望むことをするかもしれません。

6
Brendan Long