web-dev-qa-db-ja.com

USBスティックを切断せずにNautilusからアンマウントした後にUSBスティックを再マウントする方法

USBスティックを再マウントするには、物理​​的に取り外してから再接続する必要があることがわかりました。そのような疲れる肉体的な行動なしでこれをどうやって行うことができますか?

26
tshepang

Ubuntuでの私の経験から、Nautilus内からUSBスティックを「排出」すると、デバイスは実際にはシステムから消えます。なぜなのかはわかりませんが、Nautilusもコマンドラインもそれを取り戻すことはできません。論理としては、いったんUSBスティックをイジェクトすると、元に戻したくはありませんが、USBスティックを切断することになると思います。

これを回避する方法(必要な場合)は、Nautilusの代わりにumountを使用することです。また、syncを呼び出して、ファイルシステムバッファーをディスクにフラッシュすることもできます。

より多くの情報を持つスレッドを見つけました: http://ubuntuforums.org/showthread.php?t=1477247

したがって、基本的には、a)そのパッチなしでソースからnautilusを再構築する(そして、システムを更新するときに最新の状態に保つ...)またはb)別のファイルマネージャを使用する(少なくとも^^をアンマウントするとき)。

8
Thomas

これが私のUbuntu Lucidシステムでの動作です。

2つのパーティションを持つUSBフラッシュ/サムドライブを接続すると、システムは次のように報告します。

$ ls /dev/sdb*
/dev/sdb  /dev/sdb1  /dev/sdb2

$ udisks --show-info /dev/sdb | grep -A2 'partition table\|by-id'
    by-id:                     /dev/disk/by-id/usb-takeMS_USB_Mini_AA07013000010057-0:0
    by-path:                   /dev/disk/by-path/pci-0000:00:1d.7-usb-0:2:1.0-scsi-0:0:0:0
  detected at:                 Mon 29 Apr 2013 02:16:50 PM CEST
--
  partition table:
    scheme:                    mbr
    count:                     2

$ udisks --show-info /dev/sdb1 | grep -A2 'partition table\|by-id'
    by-id:                     /dev/disk/by-id/usb-takeMS_USB_Mini_AA07013000010057-0:0-part1
    by-id:                     /dev/disk/by-uuid/581E-EE0B
    by-path:                   /dev/disk/by-path/pci-0000:00:1d.7-usb-0:2:1.0-scsi-0:0:0:0-part1
  detected at:                 Mon 29 Apr 2013 04:24:25 PM CEST

$ udisks --show-info /dev/sdb2 | grep -A2 'partition table\|by-id'
    by-id:                     /dev/disk/by-id/usb-takeMS_USB_Mini_AA07013000010057-0:0-part2
    by-id:                     /dev/disk/by-uuid/4A0E-A166
    by-path:                   /dev/disk/by-path/pci-0000:00:1d.7-usb-0:2:1.0-scsi-0:0:0:0-part2
  detected at:                 Mon 29 Apr 2013 04:24:25 PM CEST

$ udevadm info --query=all --name=/dev/sdb | grep DEVPATH
E: DEVPATH=/devices/pci0000:00/0000:00:1d.7/usb1/1-2/1-2:1.0/Host13/target13:0:0/13:0:0:0/block/sdb    
$ udevadm info --query=all --name=/dev/sdb1 | grep DEVPATH
E: DEVPATH=/devices/pci0000:00/0000:00:1d.7/usb1/1-2/1-2:1.0/Host13/target13:0:0/13:0:0:0/block/sdb/sdb1
$ udevadm info --query=all --name=/dev/sdb2 | grep DEVPATH
E: DEVPATH=/devices/pci0000:00/0000:00:1d.7/usb1/1-2/1-2:1.0/Host13/target13:0:0/13:0:0:0/block/sdb/sdb2
$ Sudo partprobe /dev/sdb
$

したがって、/dev/disk/by-uuidがあるのはパーティションのみです。一方、ディスクとパーティションには(異なる)/dev/disk/by-idがあります。

ここで、LucidのGnome2デスクトップのDisk Mounterアプレットのパーティションエントリのいずれかを左クリックすると、「開く」または「イジェクト」の2つのエントリしか表示されません( [解決済み]で説明)。 lynxでnautilusを使用してUSBドライブを再マウントするにはどうすればよいですか?@ Thomas 'の回答から 16_hide_unmount.patch を参照)。また、ここでのpalimpsestは、ディスクの2つのパーティションを示しています。

どちらかのパーティションで[イジェクト]をクリックすると、両方とも消えます。この時点で、palimpsestはディスクを示しますが、パーティションは表示されず、代わりに「メディアが見つかりません」というメッセージが表示されます。また:

$ ls /dev/sdb*
/dev/sdb

$ udisks --show-info /dev/sdb | grep -A2 'partition table\|by-id'
    by-id:                     /dev/disk/by-id/usb-takeMS_USB_Mini_AA07013000010057-0:0
    by-path:                   /dev/disk/by-path/pci-0000:00:1d.7-usb-0:2:1.0-scsi-0:0:0:0
  detected at:                 Mon 29 Apr 2013 02:16:50 PM CEST

$ udisks --show-info /dev/sdb1 | grep -A2 'partition table\|by-id'
$

$ udevadm info --query=all --name=/dev/sdb | grep DEVPATH
E: DEVPATH=/devices/pci0000:00/0000:00:1d.7/usb1/1-2/1-2:1.0/Host13/target13:0:0/13:0:0:0/block/sdb
$ udevadm info --query=all --name=/dev/sdb1 | grep DEVPATH
device node not found

$ Sudo partprobe /dev/sdb
Error: Error opening /dev/sdb: No medium found

したがって、 @ ultrasawblade によるコメントで述べたように、実際にはディスクはありますが、パーティションはありません-パーティションが必要だと思いますas devicesmountに。

また、デスクトップGUIでの左クリック+「イジェクト」と同じ動作で、Sudo eject /dev/sdbを使用してターミナルに入ることができます。 palimpsestを開いて2つのパーティションをそれぞれクリックし、[ボリュームのマウント解除]をクリックすることもできます。その時点で、パーティションのアイコンが表示されますstillが表示されますDisk Mounterアプレットでは、アンマウントされたものとして表示されます。 Sudo udisks --detach /dev/sdbを実行すると、アイコンがDisk Mounterアプレットから消えますが、/dev/sdbデバイスもシステムに存在しなくなります(ただし、lsusbは引き続き表示されます)デバイス)!

かなりの答えを検索した後(udevadm monitor --environmentを介してすべてのアクションをレプリケートし、BLKRRPART ioctlが何をしているかを調べるために、プラグアンドアンプラグ中にudevadm triggerから試行しました)。成功-私はついに偶然に遭遇しました 削除して再挿入せずにUSBスティックを再マウントする方法-Ubuntu/Debian 、それは答えを持っています:

Sudo eject -t /dev/sdb

このコマンドを実行すると、2つのパーティションがディスクマウンターアプレットに再び表示されます。USBキーを抜いたり再接続したりする必要はありません。 man ejectを読んだ場合:

   -t   With  this  option the drive is given a CD-ROM tray close command.
        Not all devices support this command.

... USBフラッシュ/サムドライブに適用できるとは思わないでしょう! (そして、私は sys-utils/eject.c を調べてみましたが、明らかな何も表示されません:)

もちろん、以前にSudo udisks --detach /dev/sdbを実行したことがある場合、/dev/sdbは存在しないため、eject -t /dev/sdbeject: unable to find or open device for: '/dev/sdb'で失敗します。その場合、 #7457論理的に切断されたUSBデバイスを再接続するにはどうすればよいですか? に記載されているUSBパワーサイクルは、回復に役立ちました。

$ Sudo sh -c 'echo suspend > /sys/bus/usb/devices/1-2/power/level'
$ Sudo sh -c 'echo auto > /sys/bus/usb/devices/1-2/power/level'

これにより、パーティションのアイコンがマウントされたまま、ディスクマウンターアプレットに直接表示されます。正しいアドレスを見つけるには、ディスクがマウントされている間に試します。

$ udevadm info --attribute-walk --name=/dev/sdb | grep "looking\|busnum\|devnum" | grep -B1 'busnum\|devnum'
  looking at parent device '/devices/pci0000:00/0000:00:1d.7/usb1/1-2':
    ATTRS{busnum}=="1"
    ATTRS{devnum}=="13"
  looking at parent device '/devices/pci0000:00/0000:00:1d.7/usb1':
    ATTRS{busnum}=="1"
    ATTRS{devnum}=="1"

# the first (.../usb1/1-2) should be the right one, check bus/devnum:
$ lsusb -s 1:13
Bus 001 Device 013: ID 090c:1000 Feiya Technology Corp. Flash Drive

# looks good; check for symlinks in `sys/bus/usb/devices` as per "parent device" .../usb1/1-2
$ ls -la /sys/bus/usb/devices/ | grep "usb1/1-2"
lrwxrwxrwx 1 root root 0 2013-04-29 17:17 1-2 -> ../../../devices/pci0000:00/0000:00:1d.7/usb1/1-2
lrwxrwxrwx 1 root root 0 2013-04-29 17:21 1-2:1.0 -> ../../../devices/pci0000:00/0000:00:1d.7/usb1/1-2/1-2:1.0

# so it should be /sys/bus/usb/devices/1-2; check if it has power/level:
$ ls /sys/bus/usb/devices/1-2/power/level 
/sys/bus/usb/devices/1-2/power/level
17
sdaau

Debianベースのシステムでは、少なくとも、次のことができるはずです。

  1. ドライブ文字が何であるかを理解してください...例としてここで/ dev/sdbと言います。
  2. デバイスの電源を効果的にオンに戻すには、「would be」ドライブ文字をダブルイジェクトします。
  3. 利益!

これは機能します...魔法。

# determine 'would be drive letter'
lsblk
# do magic
eject /dev/sdb; sleep 1; eject -t /dev/sdb
4
Karl N. Redman