スクリプトがいくつかの操作を実行した後、次のコマンドを使用してそのフォルダ内のすべてのエントリを削除します/tmp
。ramfs
rm -R -f "$tmp_dir"/{*,.*}
その後、ディレクトリをアンマウントしようとしましたが、デバイスが使用中であり、最初の試みでは機能しませんでした。 0.5秒間待機後の削除に成功しました。
次のコマンドを使用して、フォルダまたはその中にあるアイテムを使用するプロセスがないことを確認しました。
fuser -m "$tmp_dir"
fuser "$tmp_dir"
lsof +d "$tmp_dir"
lsof "$tmp_dir"
最初の試みでデバイスが使用されているのはなぜですか?
編集#1(9月30日18:32 UTC):
を実行すると、find "$tmp_dir" -delete
最初のアンインストールが成功します!
しかし、find
司令部は$tmp_dir
忙しいと文句を言った。
編集#2(9月30日18:45 UTC):stat
アンインストール成功の前後にフォルダサイズが変更されたことを確認しました。
$ stat '/tmp/tmp.nbljlVcmix'
File: `/tmp/tmp.nbljlVcmix'
Size: 0 Blocks: 0 IO Block: 4096 directory
Device: 17h/23d Inode: 121188 Links: 2
Access: (0700/drwx------) Uid: ( 1000/ dor) Gid: ( 0/ root)
Access: 2013-09-30 20:37:51.430769893 +0300
Modify: 2013-09-30 20:37:51.430769893 +0300
Change: 2013-09-30 20:37:51.430769893 +0300
$ umount '/tmp/tmp.nbljlVcmix'
umount: /tmp/tmp.nbljlVcmix: device is busy.
(In some cases useful info about processes that use
the device is found by lsof(8) or fuser(1))
$ sleep 0.5
$ umount '/tmp/tmp.nbljlVcmix'
$ stat '/tmp/tmp.nbljlVcmix'
File: `/tmp/tmp.nbljlVcmix'
Size: 4096 Blocks: 8 IO Block: 4096 directory
Device: 806h/2054d Inode: 2401825 Links: 2
Access: (0700/drwx------) Uid: ( 1000/ dor) Gid: ( 0/ root)
Access: 2013-09-30 20:37:47.600513531 +0300
Modify: 2013-09-30 20:37:47.600513531 +0300
Change: 2013-09-30 20:37:47.610513892 +0300
編集#3(10月1日、11:04 UTC):
すべてのコード(単一ファイル)を次の場所にコピーしました。http://pastebin.com/RJP6eQiy(1ヶ月間有効)
関連はプログラムの行#346umount
です。cleanup
umount "$DEST_DIR"
答え1
マウント解除する前に、まずディスクを「同期化」(ディスクキャッシュフラッシュ/書き込み)する必要があると思います。 "rm"コマンドの後にsyncを追加し(一部のオペレーティングシステムでは2つのsyncコマンドが必要です)、削除します。 「忙しい」メッセージは消えなければなりません。