GNU/Linux >> Linux の 問題 >  >> Linux

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

これは、私の 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 つのエントリしか表示されません ([解決済み] How do you remount で述べたように) 16_hide_unmount.patch を参照して、@ Thomas の回答から lynx に nautilus を搭載した USB ドライブ)。また、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 のコメントで述べたように、実際にはディスクは存在しますが、パーティションは存在しません - ただし、デバイスとして パーティションが必要だと思います 、 mount にするために .

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

答えをかなり検索した後(udevadm monitor --environmentからのものを試しました udevadm trigger を介してすべてのアクションを複製して、プラグを差し込んだり抜いたりする 、 BLKRRPART が何であるかを調べます ioctl はそうします)、何の成功もありませんでした - 私は最終的に答えを持っている Ubuntu/Debian を削除して再挿入せずに USB スティックを再マウントする方法に出くわしました:

sudo eject -t /dev/sdb

このコマンドを実行すると、USB キーを抜き差ししなくても、Disk Mounter アプレットに 2 つのパーティションが再び表示されます!! 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/sdb eject: unable to find or open device for: '/dev/sdb' で失敗します .その場合、#7457 How to reconnect a logically disconnected USB device? に記載されているように、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

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

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

詳細情報があるスレッドを見つけました:http://ubuntuforums.org/showthread.php?t=1477247

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


Debian ベースのシステムでは、少なくとも、これを行うことができるはずです:

<オール>
  • ドライブ文字がどうあるべきかを考えてみましょう...ここでは例として /dev/sdb とします。
  • 「本来の」ドライブ文字をダブル イジェクトして、デバイスの電源を効果的に再投入します。
  • 利益!
  • これが機能する理由は...魔法です。

    # determine 'would be drive letter'
    lsblk
    # do magic
    eject /dev/sdb; sleep 1; eject -t /dev/sdb
    

    Linux
    1. LinuxコマンドラインからLinuxブータブルUSBを作成する方法

    2. ライブCDまたはUSBドライブなしで14.10から14.04にダウングレードする方法は?

    3. USB から iso 9660 を削除するには?

    1. USBスティックからのMySqlデータベース

    2. root にならずに USB にファイルを書き込むにはどうすればよいですか?

    3. Yumi マルチブート USB スティックから起動できない

    1. OS 全体を起動可能な USB スティックにクローンするにはどうすればよいですか?

    2. 切断後にMACアドレスが変更されないようにする方法は?

    3. コマンド履歴から特定のコマンドを実行せずに呼び出す方法