Jag har i en tidigare artikel skrivit om hur man automonterar USB stickor, detta fungerar inte om man vill att den ska ha en permanent sökväg i filsystemet eller att den ska finnas kvar om man bootar om datorn. I artikeln beskriver jag hur man sätter upp en USB-disk att automatiskt monteras vid uppstart men samtidigt inte hänga maskinen om man kopplar ur den. Viktigt är att tänka på att man ibland får använda en extern usb-hub med separat matning för att hårddisken ska få nog med ström. Om disken inte dyker upp eller man får en massa läsfel kan detta bero på att disken får för lite ström. Verifiera först att disken dyker upp bland usb-enheter
1 2 3 4 5 6 |
pi@rpi2 /var/spool/gammu $ lsusb Bus 001 Device 002: ID 0424:9514 Standard Microsystems Corp. Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub Bus 001 Device 003: ID 0424:ec00 Standard Microsystems Corp. Bus 001 Device 007: ID 05e3:0608 Genesys Logic, Inc. USB-2.0 4-Port HUB Bus 001 Device 008: ID 152d:2339 JMicron Technology Corp. / JMicron USA Technology Corp. JM20339 SATA Bridge |
Här kan man se “USB-2.0 4-Port HUB” som är min externa USB-hub med separat strömmatning, “…JM20339 SATA Bridge” är en hårddisk, SATA är förkortning för Serial Advanced Technology Attachment som är ett protokoll för som datorn pratar med hårddiskar.
Vad man sedan måste ta redan på är vad disken heter i systemet, hårddiskar (av nyare slag dvs SATA diskar) använder samma namn som tidigare SCSI diskar dvs /dev/sda, /dev/sdb osv. och partionerna numberades från 1 och uppåt, dvs första partionen på den andra disken heter /dev/sdb1.
Problemet då som nu är att namngivningen beror på ordningen som diskarna upptäcks, så om man har flera diskar och ansluter dem i en annan ordning så får de andra namn. Detta kunde orsaka ganska mycket problem tidigare. Idag ska man helst använda UUID (Universally Unique IDentifier) som är ett långt unikt nummer för disken. Moderna operativsystem stöder denna namngivning.
Så, hur får man reda på vilket UUID en disk har, man måste först får reda på vilket device namn som den har (t.ex /dev/sda1), om man har bara en kan man oftast ta reda på det via uteslutningsmetoden. Ett sätt är att titta i dmesg för att se vad den monterades som
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
pi@rpi2 ~ $ dmesg | tail -20 [22561.330478] usb 1-1.2: Product: USB2.0 Hub [22561.331901] hub 1-1.2:1.0: USB hub found [22561.332389] hub 1-1.2:1.0: 4 ports detected [22578.819182] usb 1-1.2.3: new high-speed USB device number 8 using dwc_otg [22578.920244] usb 1-1.2.3: New USB device found, idVendor=152d, idProduct=2339 [22578.920269] usb 1-1.2.3: New USB device strings: Mfr=1, Product=2, SerialNumber=5 [22578.920287] usb 1-1.2.3: Product: USB to ATA/ATAPI Bridge [22578.920303] usb 1-1.2.3: Manufacturer: JMicron [22578.920319] usb 1-1.2.3: SerialNumber: 364008444EFF [22578.922410] usb-storage 1-1.2.3:1.0: USB Mass Storage device detected [22578.923029] scsi host5: usb-storage 1-1.2.3:1.0 [22579.919803] scsi 5:0:0:0: Direct-Access APPLE HD D HTS727575A9E36 PQ: 0 ANSI: 2 CCS [22579.921100] sd 5:0:0:0: Attached scsi generic sg1 type 0 [22579.926457] sd 5:0:0:0: [sda] 1465149168 512-byte logical blocks: (750 GB/698 GiB) [22579.926878] sd 5:0:0:0: [sda] Write Protect is off [22579.926903] sd 5:0:0:0: [sda] Mode Sense: 00 38 00 00 [22579.927284] sd 5:0:0:0: [sda] Asking for cache data failed [22579.927306] sd 5:0:0:0: [sda] Assuming drive cache: write through [22579.959944] sda: sda1 [22579.962713] sd 5:0:0:0: [sda] Attached SCSI disk |
Det som är intressant är de sista raderna [sda] berättar vad disken heter dvs /dev/sda men inte vad partionerna heter eller hur många de är. Den kan man använda kommandot fdisk för att få reda på, man måste köra detta kommando som root eftersom vanliga användare inte får läsa /dev/sda
1 2 3 4 5 6 7 8 9 10 11 |
pi@rpi2 ~ $ sudo fdisk -l /dev/sda Disk /dev/sda: 750.2 GB, 750156374016 bytes 255 heads, 63 sectors/track, 91201 cylinders, total 1465149168 sectors Units = sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0x6ee422b5 Device Boot Start End Blocks Id System /dev/sda1 2048 1465145343 732571648 7 HPFS/NTFS/exFAT |
Nu ser vi att det finns en enhet som heter /dev/sda1 som är en NTFS-partition, du har vi nog med information för att få reda på UUID för den enheter
1 2 |
pi@rpi2 ~ $ ls -l /dev/disk/by-uuid/ | grep sda1 lrwxrwxrwx 1 root root 10 Jun 6 15:48 A456CCE456CCB876 -> ../../sda1 |
UUID för /dev/sda1 är allså A456CCE456CCB876 Om man vet vad man gav partition för namn kan man dubbelkolla
1 2 |
pi@rpi2 ~ $ ls -l /dev/disk/by-label/ | grep sda1 lrwxrwxrwx 1 root root 10 Jun 6 15:48 Ny\x20volym -> ../../sda1 |
Om det stämmer, jag gav den namnet “Ny volym” (\x20 = hexadecimal 20 = ascii $20 = mellanslag) Nu kan vi skapa en monteringspunk för disken dvs en katalog där innehållet på denna disk visas
1 |
sudo mkdir /usbdisk |
Sätt även den användare som ska komma åt disken som ägare av katalogen annars kan man inte skapa nya filer i rooten av den disken
1 |
sudo chown pi /usbdisk |
Som i den tidigare artikeln om USB stickor så ägs alla diskar som monteras normat av root så om du ska kunna läsa och skriva till disken som en vanlig användare så måste vi lägga till detta när disken montera. Vad vi behöver veta är vilket nummer (UID) som motsvara den användare som ska ha åtkomst till disken. Om vi vill ge användare pi åtkomst till den så kan vi få reda på UID för användaren med fölajde kommando
1 2 |
pi@rpi2 ~ $ id pi uid=1000(pi) gid=1000(pi) groups=1000(pi),4(adm),20(dialout),24(cdrom),27(sudo),29(audio),44(video),46(plugdev),60(games),100(users),106(netdev),999(input),998(spi),997(i2c),996(gpio) |
Användare pi har UID=1000, detta tillsammans med UUID kommer vi att använda när vi lägger till disken i fstab.
Nu ska vi ändra i den fil som innehåller information om vilka diskenheter som ska monterar vid uppstart och vart de ska monteras. Om du gör fel här kan de orsaka att systemet inte startar ordentligt efteråt så läs noga igenom vad jag skriver här och följ säkerhetsåtgärdena så bör det inte bli några fel. Först gör vi en kopia av originalet ifall något skulle gå fel, VIKTIGT om du gör någont fel BOOTA INTE OM utan läs längre ner.
1 |
sudo cp /etc/fstab /etc/fstab.org |
Nu har vi en kopia av /etc/fstab som heter /etc/fstab.org
Om du är osäker om du gjort rätt eller vill återställa originalet så kan du kopiera tillbaka file som den såg ut från början med följande kommando
1 |
sudo cp /etc/fstab.org /etc/fstab |
Nu ska vi lägga till disken i filen /etc/fstab, innehålle i filen bör vara något liknade
1 2 3 4 5 |
pi@rpi2 ~ $ cat /etc/fstab proc /proc proc defaults 0 0 /dev/mmcblk0p1 /boot vfat defaults 0 2 /dev/mmcblk0p2 / ext4 defaults,noatime 0 1 # a swapfile is not a swap partition, so no using swapon|off from here on, use dphys-swapfile swap[on|off] for that |
Informationen på varje rad angers med en eller flera mellanslag eller tabbar mellan varje parameter. Paramerarna är från vänster, enhetsbeteckning ( /dev/… eller UUID=), monteringspunkt, typ av filsystem, optionsparametrar, om filsystemet ska ingå när man kör dump-kommandot och sist vilka filsystem som man kan köra fsck parallellt, för att förhindra att man checkar flera partitioner på samma disk samtidigt.
Om du är osäker vilket filsystem som du ska använda kan man montera det med mount som gör en autodetektering för att avgöra vilket filsystem som finns på disken.
1 2 3 4 |
pi@rpi2 ~ $ sudo mount /dev/sda1 pi@rpi2 ~ $ mount | grep sda1 /dev/sda1 on /usbdisk type ntfs (rw,relatime,uid=1000,gid=0,fmask=0177,dmask=077,nls=utf8,errors=continue,mft_zone_multiplier=1) pi@rpi2 ~ $ sudo umount /dev/sda1 |
det som står direkt efter type är den benämning som man ska använda i filen, i detta fall ska man använda ntfs, här kan man även se att den standardmässigt monteras med uid=0 (root)
NTFS är lite speciellt när man ska mountera sådanna diskar, om man använder type ntfs kommer man bara kunna montera den som read-only dvs man kan inte skriva till disken, för att få läs-skriv måste man montera den med FUSE-3G som man hämtar med följande kommando
1 |
sudo apt-get install -y ntfs-3g |
För ntfs ska man då i stället för ntfs använda ntfs-3g.
editera filen som root
1 |
sudo nano /etc/fstab |
och lägg till följande rad i slutet, det som står efter UUID= är det nummer som du fick fram för disken och uid= är det nummer du fick fram för användaren och det filsystem som man fick fram med mount kommandot.
1 |
UUID=A456CCE456CCB876 /usbdisk ntfs-3g defaults,uid=1000,nofail 0 0 |
Optionen nofail innebär att operativsystem kommer att försöka montera disken vid uppstart men ignorera den om den inte finns tillgänglig vid uppstart. Spara filen och kontrollera att du skrivit rätt genom att skriva
1 |
sudo mount -a |
mount -a är ett behändrig kommando då -a innebär att den går igenom /etc/fstab och monterar alla diskar som finns definierade men ej monterade. Man kan använda samma kommando om man starta upp datorn och inte har disken inkopplad och när kopplar in den senare vill att den monteras utan att starta om.
Om du inte fick några felmeddelande så kan du kontrollera att den blev montera med
1 2 |
pi@rpi2 ~ $ mount | grep usbdisk /dev/sda1 on /usbdisk type ntfs (rw,relatime,uid=1000,gid=0,fmask=0177,dmask=077,nls=utf8,errors=continue,mft_zone_multiplier=1,_netdev) |
Kontrollera även att användaren kan se filerna på disken
1 2 3 4 5 6 7 8 9 10 11 |
pi@rpi2 ~ $ ls -l /usbdisk/ total 605656 drwx------ 1 pi root 126976 Jan 4 2014 100KC613 drwx------ 1 pi root 28672 Jan 4 2014 2005-08-14 -rw------- 2 pi root 129883 Feb 7 2010 4hsemester.jpg drwx------ 1 pi root 28672 Mar 23 2014 apps drwx------ 1 pi root 4096 Jan 4 2014 bilder_div drwx------ 1 pi root 126976 Jan 4 2014 bilder_spara -rw------- 1 pi root 0 Dec 21 2009 desktop.ini drwx------ 1 pi root 4096 Mar 23 2014 $RECYCLE.BIN drwx------ 1 pi root 4096 Mar 23 2014 System Volume Information |
Om du ska koppla ur disken medans datorn är igång är det viktigt att avmontera den först så alla utestående skrivningar till disken blir nedskrivna till disken innan du kopplar ur den. För att avmontera disken används kommandot umount
1 |
sudo umount /usbdisk |
Kontrollera att den inte är monterad
1 2 3 4 5 |
pi@rpi2 ~ $ mount | grep usbdisk /dev/sda1 on /usbdisk type ntfs (rw,relatime,uid=1000,gid=0,fmask=0177,dmask=077,nls=utf8,errors=continue,mft_zone_multiplier=1,_netdev) pi@rpi2 ~ $ sudo umount /usbdisk pi@rpi2 ~ $ mount | grep usbdisk pi@rpi2 ~ $ |
Om någon process använder den kommer man att få följande fel när man försöker avmontera den
1 2 3 4 |
pi@rpi2 ~ $ sudo umount /usbdisk umount: /usbdisk: device is busy. (In some cases useful info about processes that use the device is found by lsof(8) or fuser(1)) |
Man kan kontrollera om man har något fönster där man t.ex har gjort cd till någon katalog på disken. Man kan också använda sig av kommandot fuser för att få reda på vilka processer som låser disken.
1 2 3 4 5 |
pi@rpi2 ~ $ sudo fuser -m /usbdisk -u /usbdisk: 5772(pi) pi@rpi2 ~ $ ps 5772 PID TTY STAT TIME COMMAND 5772 pts/0 S+ 0:00 less /usbdisk/test.txt |
Här kan man se att en less /usbdisk/test.txt låser avmonteringen, man kan sänga varje kommando manuellt eller lägga till -k flaggan på fuser för att döda alla processer som låser disken.
1 2 3 4 |
pi@rpi2 ~ $ sudo fuser -km /usbdisk -u /usbdisk: 5772(pi) pi@rpi2 ~ $ sudo umount /usbdisk pi@rpi2 ~ $ mount | grep usbdisk |
Ett alternativ är att stänga ner maskinen och koppla ur disken när systemet har stoppat.
Om man inte vill använda disken med ett annat operativsystem, som MS Windows, så formatera en helst om partitionen till något effektivare operativsystem, som
ext4
eller så.Detta för att det dels behöver Linux emulera sitt filsystems-api ovanpå FAT (varianterna), dels att det finns några tekniska tillkortakommanden med FAT (varianterna).
Så om du vill montera permanent, formatera om till bättre filsystem.
Om du monterar om för sneaker net (filöverföring med USB-sticka), låt filsystemet vara det som den andra datorn klarar.