Korte uitleg: Mounten van filesystemen door de desktopgebruiker
Aangezien deze korte uitleg over mounten van filesystemen onder bijzondere omstandigheden gaat wordt de lezer geacht Korte uitleg: Mounten van filesystemen begrepen te hebben.
Zoals daar gezegd: mounten van filesystemen is jarenlang de taak van de systeembeheerder geweest. Hij/zij zorgde voor een correcte /etc/fstab en als er iets bijzonders gedaan moest worden handelde hij/zij dat met mount statements af. Tenslotte was het aansluiten van nieuwe schijven iets waarvoor het systeem spanningsloos moest worden gemaakt en dat ging mooi allemaal samen in geplande onderhoudstijd. Tegenwoordig hebben we apparaten die bij draaiend systeem kunnen worden aangesloten en verwijderd (CDs, DVDs, USB stick, geheugenkaarten) en omdat bij Linux de gebruiker eigenlijk ook operator is, wil die gebruiker dat zelf doen zonder een systeembeheerder te moeten inschakelen. Dat lijkt simpel, maar dat is het niet:
Er zijn verschillende software pakketten (o.a. HAL) voor gemaakt en weer vervangen. Het lijkt er op dat de huidige stand van zaken (een combinatie can udev en usdisk2) redelijk stabiel en correct is.
Toch gebeurt er wel eens iets dat de gebruiker niet begrijpt. We zullen daarom hier proberen alle stappen te volgen en te laten zien hoe die stappen te controleren zijn. We gaan daarbij uit van een mass-storage apparaat dat door een eindgebruiker ingelogd in de desktop wordt aangesloten. Ook nemen we aan dat er één partitie is.
Aansluiten en detecteren
Bij aansluiten van de USB stekker gaat de Kernel uitzoeken wat voor apparaat het is. Bedenk daarbij dat de Kernel niet iets verzint. Alle gegevens komen vanuit het aangesloten apparaat. Heb je reden om hier nader na te kijken, gebruik dan
(je stopt dmesg door Ctrl-C te tikken)
en sluit daarna het apparaat aan. Hieronder een voorbeeld de regels die horen bij zo'n aktie:
Als hierbij geen regel met USB Mass Storage device detected verschijnt, kun je dus ook later niets mounten. Je dacht wel dat het mass-storage was, maar het is het niet. Er zijn bijvoorbeeld camera's die het Picture Tranfer Protocol (PTP) gebruiken en dat is geen mass-storage. Soms kunnen die camera's ook als mass-storage gebruikt worden, maar moet eerst de camera worden omgeconfigureerd van PTP naar mass-storage.
Let hier ook op eventuele verdere foutmeldingen.
We zien hier ook dat sdf vermeld wordt. Dit is ook de naam van de device file in /dev: /dev/sdf.
Aanmaken device files
De Kernel geeft nu een seintje aan de udev daemon. En die maakt de device files aan. Dus een /dev/sdX en ook eventuele symbolic links in de /dev/disk/by-* directories. Boven zagen we dat in ons geval sdf de naam is:
Als één of meer filesystemen een Volume Label hebben zul je dat ook hier zien.
Wie deed dat?
Een probleem dat zich nu voordoet op een operating systeem dat meerdere gebruikes ondersteunt en ook ondersteunt dat er meer ingelogde sessies tegelijkertijd kunnen zijn is nu: wie stopte dat ding er in en met wie moeten we dus gaan praten?
Als je met meer personen een systeem gebruikt, zorg er dan voor dat je eerst een lopende sessie van jezelf voor ogen hebt voor je een USB stick aansluit.
Mountpoint maken
Er wordt een mountpoint aangemaakt. Dat moet gebeuren op een plaats die niet door andere akties (en dus ook niet door de systeembeheerder) wordt gebruikt. Bovendien moet de plaats uniek zijn omdat meer gebruikers tegelijk apparaten aangesloten kunnen hebben (je kunt van sessie wisselen en iets anders inprikken). Tevens moet de naam afhangen van het apparaat omdat dezelfde gebruiker ook meer dingen kan aansluiten. Vroeger werdt daar /media voor gebruikt, tegenwoordig zowel /var/run/media als /run/media. Daarin komt een directory met de username. en daarin komt een directory met ofwel het Volume Label van het file systeem, of het UUID.
De UID en de bijbehorende default GID van de active seat wordt eigenaar van het mountpoint. In dit geval henk:wij.
Deze aktie gaat meestal wel goed.
Nog een tip. Gebruik deze directories (/media, /var/run/media /run/media) nooit om daar zelf iets in te zetten. Ook geen mountpoints. Als je geen betere plek weet kies er dan voor een mountpoint aan te maken binnen /mnt.
Mount opties bepalen
Er wordt uitgezocht (slim raden) wat voor filesysteem er op de partitie staat. Bij een Linux filesysteem is er verder niet veel meer uit te zoeken. Maar bij een niet Linux filesysteem bestaan geen eigenaar en group en permissie bitjes. Die moeten worden nagebootst en dat gebeurt met een hele rij parameters, die o.a. de UID en GID van de active seat gebruiker bevatten. Zo wordt het filesysteem beschermd tegen gebruik door anderen. hier een voorbeeld voor een VFAT filesysteem:
Uiteraard kun je de betekenis vinden in
bij de hoofdstukken Filesystem Independent Mount Options of Mount options for fat.
Let nog even op de optie errors=remount-ro. Deze betekent dat als er problemen zijn bij het mounten, het filesysteem read-only wordt gemount. In de praktijk komt dat vaak voor als het filesysteem eerder op een Windows systeem niet goed werd afgesloten (veilig verwijderd).
Mounten
Nu is alles bekend en kan er gemount worden. Uiteraard gebeurt dat door een root proces.
Het resultaat in ons voorbeeld:
En op de desktop wordt nu de bestaandsbeheer gestart met het mountpoint als doel.
Unmounten
Uiteraard vergeet je niet om het apparaat via je desktop (device notifier) af te koppelen (dat heeft dus een umount tot gevolg) voor je het verwijdert. Ook bij stoppen van het systeem wordt een nette umount gedaan, dus het is niet erg als je dat vergeet als je een shutdown doet.
Overigens lukt afkoppelen alleen als er niets meer met dat filesysteem bezig is. Sluit dus bijv. zo'n bestandsbeheerder af (of surf ergens anders heen).
Aandachtspunten als het "fout" gaat
Aangezien deze korte uitleg over mounten van filesystemen onder bijzondere omstandigheden gaat wordt de lezer geacht Korte uitleg: Mounten van filesystemen begrepen te hebben.
Zoals daar gezegd: mounten van filesystemen is jarenlang de taak van de systeembeheerder geweest. Hij/zij zorgde voor een correcte /etc/fstab en als er iets bijzonders gedaan moest worden handelde hij/zij dat met mount statements af. Tenslotte was het aansluiten van nieuwe schijven iets waarvoor het systeem spanningsloos moest worden gemaakt en dat ging mooi allemaal samen in geplande onderhoudstijd. Tegenwoordig hebben we apparaten die bij draaiend systeem kunnen worden aangesloten en verwijderd (CDs, DVDs, USB stick, geheugenkaarten) en omdat bij Linux de gebruiker eigenlijk ook operator is, wil die gebruiker dat zelf doen zonder een systeembeheerder te moeten inschakelen. Dat lijkt simpel, maar dat is het niet:
- mounten kan alleen door een root process;
- Linux is een multi-user systeem en er kunnen dus meer gebruikers tegelijk zijn ingelogd. Wie mag nu die USB stick gebruiken? (Daar zijn leuke anekdotes over);
- moet het aanmaken van mountpoints "vanzelf" gaan?
- welke parameters worden daarbij gebruikt, dit punt is vooral belangrijk omdat veel van de gebruikte apparaten niet-Linux filesystemen bevatten en daarvoor moeten zaken via deze parameters geregeld worden.
Er zijn verschillende software pakketten (o.a. HAL) voor gemaakt en weer vervangen. Het lijkt er op dat de huidige stand van zaken (een combinatie can udev en usdisk2) redelijk stabiel en correct is.
Toch gebeurt er wel eens iets dat de gebruiker niet begrijpt. We zullen daarom hier proberen alle stappen te volgen en te laten zien hoe die stappen te controleren zijn. We gaan daarbij uit van een mass-storage apparaat dat door een eindgebruiker ingelogd in de desktop wordt aangesloten. Ook nemen we aan dat er één partitie is.
Aansluiten en detecteren
Bij aansluiten van de USB stekker gaat de Kernel uitzoeken wat voor apparaat het is. Bedenk daarbij dat de Kernel niet iets verzint. Alle gegevens komen vanuit het aangesloten apparaat. Heb je reden om hier nader na te kijken, gebruik dan
Code:
dmesg -w
en sluit daarna het apparaat aan. Hieronder een voorbeeld de regels die horen bij zo'n aktie:
Code:
[ 7614.897032] usb 1-7: new high-speed USB device number 7 using ehci-pci
[ 7615.013688] usb 1-7: New USB device found, idVendor=0ea0, idProduct=1001
[ 7615.013697] usb 1-7: New USB device strings: Mfr=1, Product=2, SerialNumber=0
[ 7615.013701] usb 1-7: Product: Flash Disk
[ 7615.013706] usb 1-7: Manufacturer: USB
[ 7615.014044] usb-storage 1-7:1.0: USB Mass Storage device detected
[ 7615.015458] scsi5 : usb-storage 1-7:1.0
[ 7616.018267] scsi 5:0:0:0: Direct-Access NOR Flash Disk 2.00 PQ: 0 ANSI: 2
[ 7616.018714] sd 5:0:0:0: Attached scsi generic sg6 type 0
[ 7617.068525] ready
[ 7617.077926] sd 5:0:0:0: [sdf] 119574 512-byte logical blocks: (61.2 MB/58.3 MiB)
[ 7617.087420] sd 5:0:0:0: [sdf] Write Protect is off
[ 7617.087429] sd 5:0:0:0: [sdf] Mode Sense: 03 00 00 00
[ 7617.096918] sd 5:0:0:0: [sdf] No Caching mode page found
[ 7617.096925] sd 5:0:0:0: [sdf] Assuming drive cache: write through
[ 7617.149036] sd 5:0:0:0: [sdf] No Caching mode page found
[ 7617.149044] sd 5:0:0:0: [sdf] Assuming drive cache: write through
[ 7617.170434] sdf: sdf1
[ 7617.224672] sd 5:0:0:0: [sdf] No Caching mode page found
[ 7617.224681] sd 5:0:0:0: [sdf] Assuming drive cache: write through
[ 7617.224687] sd 5:0:0:0: [sdf] Attached SCSI removable disk
Let hier ook op eventuele verdere foutmeldingen.
We zien hier ook dat sdf vermeld wordt. Dit is ook de naam van de device file in /dev: /dev/sdf.
Aanmaken device files
De Kernel geeft nu een seintje aan de udev daemon. En die maakt de device files aan. Dus een /dev/sdX en ook eventuele symbolic links in de /dev/disk/by-* directories. Boven zagen we dat in ons geval sdf de naam is:
Code:
henk@boven:~> l /dev/sdf* /dev/disk/by-* | grep sdf
brw-rw---- 1 root disk 8, 80 30 mei 11:55 /dev/sdf
brw-rw---- 1 root disk 8, 81 30 mei 11:55 /dev/sdf1
lrwxrwxrwx 1 root root 9 30 mei 11:55 usb-NOR_Flash_Disk-0:0 -> ../../sdf
lrwxrwxrwx 1 root root 10 30 mei 11:55 usb-NOR_Flash_Disk-0:0-part1 -> ../../sdf1
lrwxrwxrwx 1 root root 9 30 mei 11:55 pci-0000:00:1d.7-usb-0:7:1.0-scsi-0:0:0:0 -> ../../sdf
lrwxrwxrwx 1 root root 10 30 mei 11:55 pci-0000:00:1d.7-usb-0:7:1.0-scsi-0:0:0:0-part1 -> ../../sdf1
lrwxrwxrwx 1 root root 10 30 mei 11:55 343A-2B00 -> ../../sdf1
henk@boven:~>
Wie deed dat?
Een probleem dat zich nu voordoet op een operating systeem dat meerdere gebruikes ondersteunt en ook ondersteunt dat er meer ingelogde sessies tegelijkertijd kunnen zijn is nu: wie stopte dat ding er in en met wie moeten we dus gaan praten?
- Remote ingelogde gebruikers vallen af.
- Niet in de GUI ingelogd gebruikers doen niet mee.
- Van de lokaal ingelogde gebruikers in de GUI wordt uitgezocht welke sessie op het scherm wordt getoond.
Als zo'n sessie er is wordt dat de "active seat" genoemd en de desbetreffende desktop software krijgt een seintje. Al naar gelang de desktop software (KDE, Gnome, ...) wordt de gebruiker van de "active seat" getoond dat er een apparaat is aangesloten en er wordt gevraagd wat er mee te doen. Laten we aannemen dat de gebruiker kiest om een bestandsbeheerder te starten.
Als je met meer personen een systeem gebruikt, zorg er dan voor dat je eerst een lopende sessie van jezelf voor ogen hebt voor je een USB stick aansluit.
Mountpoint maken
Er wordt een mountpoint aangemaakt. Dat moet gebeuren op een plaats die niet door andere akties (en dus ook niet door de systeembeheerder) wordt gebruikt. Bovendien moet de plaats uniek zijn omdat meer gebruikers tegelijk apparaten aangesloten kunnen hebben (je kunt van sessie wisselen en iets anders inprikken). Tevens moet de naam afhangen van het apparaat omdat dezelfde gebruiker ook meer dingen kan aansluiten. Vroeger werdt daar /media voor gebruikt, tegenwoordig zowel /var/run/media als /run/media. Daarin komt een directory met de username. en daarin komt een directory met ofwel het Volume Label van het file systeem, of het UUID.
Code:
henk@boven:~> ls -l /var/run/media
totaal 0
drwxr-x---+ 3 root root 60 30 mei 11:56 henk
henk@boven:~> ls -l /var/run/media/henk
totaal 28
drwx------ 2 henk wij 27136 1 jan 1970 343A-2B00
henk@boven:~>
Deze aktie gaat meestal wel goed.
Nog een tip. Gebruik deze directories (/media, /var/run/media /run/media) nooit om daar zelf iets in te zetten. Ook geen mountpoints. Als je geen betere plek weet kies er dan voor een mountpoint aan te maken binnen /mnt.
Mount opties bepalen
Er wordt uitgezocht (slim raden) wat voor filesysteem er op de partitie staat. Bij een Linux filesysteem is er verder niet veel meer uit te zoeken. Maar bij een niet Linux filesysteem bestaan geen eigenaar en group en permissie bitjes. Die moeten worden nagebootst en dat gebeurt met een hele rij parameters, die o.a. de UID en GID van de active seat gebruiker bevatten. Zo wordt het filesysteem beschermd tegen gebruik door anderen. hier een voorbeeld voor een VFAT filesysteem:
Code:
rw,nosuid,nodev,relatime,uid=500,gid=500,fmask=0022,dmask=0077,codepage=437,iocharset=iso8859-1,shortname=mixed,showexec,utf8,flush,errors=remount-ro
Code:
man mount
Let nog even op de optie errors=remount-ro. Deze betekent dat als er problemen zijn bij het mounten, het filesysteem read-only wordt gemount. In de praktijk komt dat vaak voor als het filesysteem eerder op een Windows systeem niet goed werd afgesloten (veilig verwijderd).
Mounten
Nu is alles bekend en kan er gemount worden. Uiteraard gebeurt dat door een root proces.
Het resultaat in ons voorbeeld:
Code:
henk@boven:~> mount | grep sdf
/dev/sdf1 on /run/media/henk/343A-2B00 type vfat (rw,nosuid,nodev,relatime,uid=500,gid=500,fmask=0022,dmask=0077,codepage=437,iocharset=iso8859-1,shortname=mixed,showexec,utf8,flush,errors=remount-ro,uhelper=udisks2)
/dev/sdf1 on /var/run/media/henk/343A-2B00 type vfat (rw,nosuid,nodev,relatime,uid=500,gid=500,fmask=0022,dmask=0077,codepage=437,iocharset=iso8859-1,shortname=mixed,showexec,utf8,flush,errors=remount-ro)
henk@boven:~>
Unmounten
Uiteraard vergeet je niet om het apparaat via je desktop (device notifier) af te koppelen (dat heeft dus een umount tot gevolg) voor je het verwijdert. Ook bij stoppen van het systeem wordt een nette umount gedaan, dus het is niet erg als je dat vergeet als je een shutdown doet.
Overigens lukt afkoppelen alleen als er niets meer met dat filesysteem bezig is. Sluit dus bijv. zo'n bestandsbeheerder af (of surf ergens anders heen).
Aandachtspunten als het "fout" gaat
- gebruik bij aansluiten, maar ook bij mountenCode:
dmesg
Code:dmesg -w
- Je kunt wel denken dat iets mass-storage is, maar dat hoeft niet zo te zijn (zie boven).
- Op Windows niet goed afgesloten filesystemen worden niet, of read-only gemount. Ga dus eerst terug naar een Windows systeem om dat daar te herstellen.
- Op Linux filesystemen heeft ieder bestand een eigenaar (UID en GID). Als een filesysteem op een ander systeem is geweest is het niet zeker dat dat dezelfde UID/GID als die van de "active seat" zijn. Dat kan dus "Toegang geweigerd" opleveren. Het gaat dus NIET om de usernaam (bijv. henk), maar on de UID (500 in dit geval).
- Als je als beheerder wilt voorkomen dat een mass-storage apparaat wordt behandeld zoals hierboven, maar je wilt het gewoon zelf op een door jou te bepalen plaats mounten, doe dan het volgende:
- maak een mountpoint (bijv. in /mnt);
- zoek uit wat de UUID van het filesysteem is of zet een Volume Label op het filesysteem;
- zet een regel in /etc/fstab met als device file de correcte /dev/disk/by-uuid/<UUID> of /dev/disk/by-label/<Volume-Label> naam, als mountpoint het mountpoint, het filesysteem type en als optie in ieder geval noauto;
- Voor gebruik door root is dit voldoende, root kan nu mounten, maar als je dit voor een gewone gebruiker doet, voeg dan de optie user toe; vergeet dan ook niet om de permissies (en eventueel de eigenaar/groep) van het mountpoint zo te zetten dat de user er bij kan; handig voor de gebruiker is een symbolic link ergens vanuit zijn home directory naar het mountpoint.
De basis hiervoor is dat de desktop akties niet gedaan worden als het filesysteem wordt herkend in /etc/fstab.