USB anahtarı her taktığımda aynı ada sahip olacak mı?


9

Bir bash betiği ile günlük verileri kaydetmek için kullanılacak bir USB anahtarım var. Komutu kullanarak içindeki klasörleri yazabilmek için belirli bir kullanıcı için bağlamayı başardım:

mount /dev/sdc1 /media/usb -o rw,uid=sysop,gid=sysop

Komut dosyası istediği gibi çalışabilir ve dizinler oluşturabilir ve mükemmeldir. Bir noktada, USB anahtarı çıkarılır ve yenisiyle değiştirilir (aynı model). Yeni USB anahtarın adı yine de /dev/sdc1olacak mı yoksa farklı mı olacak?

Farklıysa, otomatik olarak yapılması için montaj parçasını komut dosyasına nasıl ekleyebilirim?


2
Cevap hayır, ancak udev kuralları ile bu sorunu çözebilirsiniz . Daha iyi ama biraz modası geçmiş bir açıklama için buraya bakın .
Satō Katsura

@AlexTartan Eğer sdc alabilir önce başka bir usb portuna başka bir usb disk takarsanız. Yani "ve sdc1'e başka bir şey varsaymayın" kısıtınız doğrudur. Genel olarak bu, asla yapılamayacak çok tehlikeli bir varsayımdır. Kalıcı aygıt adları olarak sd [az] kullanmak asla iyi bir fikir değildir. Bu, donanım atlama telleri ayarlayarak ve doğru kablo fişini seçerek ayarlanabilen dört statik bağlantı noktasına sahip IDE denetleyicilerine sahip olduğumuz zamanlardan kalma bir miras.
ikrabbe

1
@ikrabbe, biliyorum, bu yüzden etiket tanımlamaya dayalı bir cevap yayınladım (bunlar biraz daha kolay yönetilebilir).
Alex Tartan

Yanıtlar:


6

Bununla erişim /dev/sdXyriskli olsa da, daha doğru bir tanımlama yapılabilir UUID.

USB çubuğunu değiştirdiğinizden (bir noktada), uyumluluğu korumak için, usb çubuğunuzu bir etiketle tanımlamak isteyebilirsiniz. Bunu yapmak için aşağıdakileri yapabilirsiniz: /dev/disk/by-label/YourLabelHere.

Komut dosyasını çalıştırmadan önce etiketi yeni bir usb çubuğuna ayarlamanız gerektiğini ve ayrıca /dev/disk/by-label(en azından) bir usb çubuğu bağlıysa (aksi takdirde çıkarılırsa) kullanılabilir olduğunu unutmayın.

USB etiketinin nasıl kurulacağıyla ilgili ayrıntılar burada bulunabilir: /ubuntu/194510/how-to-edit-label-of-usb-drive


1
Dosya sistemlerinizde etiket yoksa, /dev/disk/by-id/bunun yerine kullanışlı olabilir (dosya sistemlerim için kullandığım şey budur).
Toby Speight

3

Bu sorunu bu şekilde ele alıyorum, ama genellikle Sato Katsura'nın söylediği gibi, bir udev kuralı yazmanız gerekiyor.

  1. Cihazınızı takın, hangi cihaza sahip olduğunu kontrol edin (örneğin dmesg izleyerek).
  2. Süper kullanıcı çağrısı olarak udevadm info --query all /dev/sdc(veya her neyse).
  3. Bir udev kuralı oluşturun, işte cüzdanım için bir örnek. Alanlar ID_SERIAL_SHORTve ID_FS_UUIDben 2. adımdaki bilgilerden okudum:

    SUBSYSTEM=="block", ENV{ID_SERIAL_SHORT}=="YT440900877400W000Y0", ENV{ID_FS_UUID}=="3878-D432", ENV{DEVTYPE}=="disk", SYMLINK+="pocketbook", OWNER="ingo"
    SUBSYSTEM=="block", ENV{ID_SERIAL_SHORT}=="YT440900877400W000Y0", ENV{ID_FS_UUID}=="9016-4EF8", ENV{DEVTYPE}=="disk", SYMLINK+="pocketbook-sd", OWNER="ingo"
    

    OWNER'ı, ana kullanıcı hesabımla bağlayabileceğim şekilde ayarladım. Ayrıca cüzdanımla bölümlerim yok ama düz diskleri takıyorum. Bölüm değişikliğiniz varsa:

    ENV{ID_PART_ENTRY_NUMBER}=="1", ENV{DEVTYPE}=="partition",
    

    bölüm 1 için, udev kural satırlarında.

/etc/udev/rules.dAklı başında bir sisteminiz varsa, udev kuralları bulunur .

  1. Şimdi yapabilirsin

    udevadm control --reload
    

    kuralları yeniden yüklemek ve

    udevadm monitor
    

    5. adımda neler olduğunu izlemek için.

  2. Plugout ve Plugin usb cihazınızı (tabii ki monte etmeden önce bağlantısını kestikten sonra). Monitör başlatıldığında yeni cihaz hakkında sizi bilgilendirmelidir.

  3. /dev/Doğru simgeleri içerip içermediğini kontrol edin . Örneğimde şunu aldım:

    brw-rw---- 1 ingo disk    8,  48 Aug  3 10:32 sdd
    brw-rw---- 1 ingo disk    8,  32 Aug  3 10:32 sdc
    lrwxrwxrwx 1 root root         3 Aug  3 10:32 pocketbook-sd -> sdd
    lrwxrwxrwx 1 root root         3 Aug  3 10:32 pocketbook -> sdc
    

Şimdi sembolik bağları kalıcı kurallar tanımlayabilirsiniz /dev/pocketbookve /dev/pocketbook-sdudev kuralları dosyanın Sembolik bağ alanına isimleri ya da her türlü.


1
Cevabınız için teşekkür ederim. Ancak onu kullanamayacağım. Üzerinde çalıştığım cihaz bir yanardağ üzerine kurulmuş ve usb bellek orada elde edilen verileri saklamak için kullanılıyor. Usb stick'i değiştirmek için her üç ayda bir oraya gideceğiz. Herhangi bir "ekran" arayüzü olmadan, sadece bir uzaktan erişim var. Usb her zaman farklı olacak, ancak aynı usb portlarına takıldığından, daha kolay yolun sdc1 yolunu tutmak olduğunu düşünüyorum. Udev kuralları ile neler yapabileceğimi göreceğim.
Gudrun

0

Sadece @ alextartan'ın cevabına eklemek için.

Hedefler için USB sürücüler kullanan kendi yedekleme sistemimi yuvarladım. Neyin nereye gittiğinden emin olmalıyım. UUID'ler özellikle kullanıcı dostu olmadığından disk etiketlerine güveniyorum.

UUID'ler de biraz sorunludur, çünkü bir bölümü yeniden biçimlendirdiğinizde yeni bir benzersiz UUID alır, bu nedenle bu UUID'yi kullanan tüm komut dosyalarının değiştirilmesi gerekir. Yeniden biçimlendirilmiş bölüme (hatta yeni / yedek sürücüdeki bir bölüme) aynı etiketi atayabilir ve komut dosyalarımı yalnız bırakabilirim.

Kendi benzersiz (insan dostu) etiketleme kuralımı buldum ve bunları oluştururken çeşitli bölümleri etiketlemek için gparted kullanıyorum.

Betiklerimin belirli bir bölüme erişmesi gerektiğinde, etiketi kullanarak cihazın adını ararım.

function get_dev {
  ## Return the device name of a partition
  ## In DEV
  ## Given its label
  ## Partition does not need to be mounted
  ## Usage get_dev <partition_label>
  ## Copyleft 04/28/2014 JPmicrosystems
  local LINE
  local VERBOSE=1  ## Verbose version
  local USAGE="ERROR Usage is: get_dev <partition_label>"
  unset DEV

  if [ -z "${1}" ]
  then
    (( VERBOSE )) && echo $USAGE
    return 1
  fi

  LINE=$(ls -l /dev/disk/by-label | grep " ${1} ")
  if (( $? ))
  then
    (( VERBOSE )) && echo "ERROR Partition [${1}] not found"
    return 1
  fi

  DEV="/dev/${LINE##*/}"
  return 0
}
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.