kazmax - Linux で自宅サーバー

Linux ハードディスクをアンマウント(umount)する

ハードディスクを外すには、OSが認識しているmount状態を解除します。マウント(mount)されたハードディスクを解除するには、umountコマンドを使います。ここではumountコマンドについて解説します。

Last Update : 2013年08月17日

Linux ハードディスクをアンマウント(umount)する 項目

  1. umountの書式
  2. umountする
  3. umountできない時 - 使用しているユーザーを調べる
  4. umountできない時 - 誰も使わなくなったらアンマウントする

1. umountの書式

書式

umount デバイス名orマウントポイント

有用なオプション

オプション 意味
-t タイプ 指定したタイプのファイルシステムだけアンマウントする
-l(小文字のL) lazy アンマウント。対象のファイルシステムへの全ての参照がbusyでなくなった時点でアンマウントする

デバイス名、マウントポイントはどちらかひとつをパスで指定します。

2. umountする

実際にアンマウントしてみます。

# df
Filesystem           1K-ブロック    使用   使用可 使用% マウント位置
/dev/mapper/vg_sandbox1-lv_root
                       5716804   2668532   2757868  50% /
tmpfs                   510244         0    510244   0% /dev/shm
/dev/sda1               495844     56502    413742  13% /boot
/dev/sdb5               988180     17628    920356   2% /mnt/diskA
※ sdb5 がマウントされている

# umount /dev/sdb5 ← /dev/sdb5 をアンマウント

# df
Filesystem           1K-ブロック    使用   使用可 使用% マウント位置
/dev/mapper/vg_sandbox1-lv_root
                       5716804   2668532   2757868  50% /
tmpfs                   510244         0    510244   0% /dev/shm
/dev/sda1               495844     56502    413742  13% /boot
※ /dev/sdb5のマウントが解除され表示されなくなった

3. umountできない時 - 使用しているユーザーを調べる

アンマウント対象のファイルシステム上のファイルがオープンされていたり、あるプロセスのワーキングディレクトリになっていたりすると、「busy」という状態になり、アアンマウントできません。

# umount /mnt/diskA/
umount /mnt/diskA/: デバイスがビジーです。
 (このデバイスがプロセスによって使われているのであれば、
     lsof(8)やfuser(1)を使って調査するのが有益かもしれません)

こういった場合は、誰がそのファイルシステムを使用しているか調べれば解決します。

調査にはfuserコマンドが便利です。fuserコマンドに「-v」オプションと、マウントポイントを指定すると使用しているユーザーやコマンドがわかります。

※/mnt/diskA/を使っているユーザーや、プログラムを調べる
# fuser -v /mnt/diskA/
               USER        PID ACCESS COMMAND
/mnt/diskA/:   root       5774 ..c.. bash
               root       6058 ..c.. vi

対象のユーザーの、/mnt/diskA/ 配下での処理を終了させればアンマウントができるようになります。

また、PID(プロセスID)がわかるので、lsofコマンドを使って、PIDからそのプロセスがどのファイルを使っているか調べる事ができます。

# lsof -p 6058
COMMAND  PID USER   FD   TYPE DEVICE SIZE/OFF   NODE NAME
vi      6058 root  cwd    DIR   8,21     4096      2 /mnt/diskA
vi      6058 root  rtd    DIR  253,0     4096      2 /
vi      6058 root  txt    REG  253,0   770248    724 /bin/vi
vi      6058 root  mem    REG  253,0   156912 143815 /lib64/ld-2.12.so
vi      6058 root  mem    REG  253,0    22536 143841 /lib64/libdl-2.12.so
vi      6058 root  mem    REG  253,0  1922152 143830 /lib64/libc-2.12.so
vi      6058 root  mem    REG  253,0   598680 143842 /lib64/libm-2.12.so
vi      6058 root  mem    REG  253,0   124624 166227 /lib64/libselinux.so.1
vi      6058 root  mem    REG  253,0    21152 176008 /lib64/libattr.so.1.1.0
vi      6058 root  mem    REG  253,0   138280 163308 /lib64/libtinfo.so.5.7
vi      6058 root  mem    REG  253,0    33816 176009 /lib64/libacl.so.1.1.0
vi      6058 root  mem    REG  253,0   142536 134856 /lib64/libncurses.so.5.7
vi      6058 root  mem    REG  253,0    65928 134061 /lib64/libnss_files-2.12.so
vi      6058 root  mem    REG  253,0 99154480 175599 /usr/lib/locale/locale-archive
vi      6058 root    0u   CHR  136,0      0t0      3 /dev/pts/0
vi      6058 root    1u   CHR  136,0      0t0      3 /dev/pts/0
vi      6058 root    2u   CHR  136,0      0t0      3 /dev/pts/0
vi      6058 root    4u   REG   8,21    12288     13 /mnt/diskA/.test.txt.swp ← オープンしているファイル

この場合、「6058」というプロセスIDは、 /mnt/diskA/.test.txt.swpというアンマウント対象のファイルシステム上にあるファイルをオープンしている事がわかります。

これらの情報をもとに、デバイスのビジー状態を解除すれば(ファイルの使用をやめてもらったり、プロセスをkillする)、アンマウントができるようになります。

4. umountできない時 - 誰も使わなくなったらアンマウントする

umountコマンドには、lazy アンマウントというオプションがあります。これは、Busy状態で今アンマウントできなくても、ファイルシステムの利用がなくなった時点でアンマウントするという機能をもつオプションです。

lazy アンマウントを試します。ユーザーAと、rootアカウントの二つの立場から、状態を確認してみます。

ユーザーA root

/mnt/diskA がマウントされている

# df
Filesystem           1K-ブロック   使用 使用可 使用% マウント位置
/dev/mapper/vg_sandbox1-lv_root
                       5716804  2668592 2757808  50% /
tmpfs                   510244        0  510244   0% /dev/shm
/dev/sda1               495844    56502  413742  13% /boot
/dev/sdb5               988180    17628  920356   2% /mnt/diskA

アンマウント対象のファイルシステムを使用中。

# pwd
/mnt/diskA

アンマウントを試みる

# umount /mnt/diskA/
umount /mnt/diskA: デバイスがビジーです
 (このデバイスがプロセスによって使われているのであれば、
   lsof(8)やfuser(1)を使って調査するのが有益かもしれません)

ユーザーAが/mnt/diskAを利用しているのでアンマウントできない

lazy オプションでアンマウントする

# umount -l /mnt/diskA/  ← lazy オプションでアンマウント

マウント状態を確認する。

# df
Filesystem           1K-ブロック   使用  使用可 使用% マウント位置
/dev/mapper/vg_sandbox1-lv_root
                       5716804  2668580  2757820  50% /
tmpfs                   510244        0   510244   0% /dev/shm
/dev/sda1               495844    56502   413742  13% /boot
※ /mnt/diskA の表示がない

いっけん/mnt/diskAがアンマウントされたように見える

# pwd
/mnt/diskA

# touch test.txt
# ls -l
合計 16
drwx------. 2 root root 16384 8月 15 11:22 2013 lost+found
-rw-r--r--. 1 root root     0 8月 15 13:25 2013 test.txt

umount 後も、まだファイルシステムを使用できる。
=まだアンマウントされていない

/mnt/diskA ディレクトリから移動し、アンマウント対象のファイルシステムのBusyを解除する

# cd /mnt/
# ls -l /mnt/diskA/
合計 0

/mnt/diskA から移動した瞬間にアンマウントされ、先ほど作ったファイルも見えなくなる

この時点で正式にアンマウントの処理が完了しています。

再マウントしてみる

# mount -t ext4 -o defaults /dev/sdb5 /mnt/diskA/
# ls -l /mnt/diskA/
合計 16
drwx------. 2 root root 16384 8月 15 11:22 2013 lost+found
-rw-r--r--. 1 root root     0 8月 15 13:25 2013 test.txt

マウントされるとアンマウント前に作成したファイルが見える

Linuxファイルシステム 関連記事
Linux 基礎知識 関連記事