Poslední poznámka k fstab - MujMAC.cz - Apple, Mac OS X, Apple iPod

Odběr fotomagazínu

Fotografický magazín "iZIN IDIF" každý týden ve Vašem e-mailu.
Co nového ve světě fotografie!

 

Zadejte Vaši e-mailovou adresu:

Kamarád fotí rád?

Přihlas ho k odběru fotomagazínu!

 

Zadejte e-mailovou adresu kamaráda:

Seriály

Více seriálů



Služby

Poslední poznámka k fstab

27. února 2003, 00.00 | Minule jsme si popsali způsob, jak se v unixu standardně "montují" jiné disky na místo existujících složek: ukázali jsme si konkrétní příklad se složkou pro odkládací soubory správce virtuální paměti "/private/var/vm", ovšem stejný mechanismus lze použít i pro jakoukoli jinou složku (třeba domovskou či aplikační).

Minule jsme si popsali způsob, jak se v unixu standardně "montují" jiné disky na místo existujících složek: ukázali jsme si konkrétní příklad se složkou pro odkládací soubory správce virtuální paměti "/private/var/vm", ovšem stejný mechanismus lze použít i pro jakoukoli jinou složku (třeba domovskou či aplikační).

Zmínili jsme se také o problému Mac OS X se standardním uváděním zařízení, representujícího disk (šlo o to, že Mac OS X jména zařízení přiřazuje víceméně náhodně, takže by to bylo nespolehlivé), a ukázali jsme si trik s určením disku pomocí jeho jména ("LABEL="), který tento problém odstraní. Na dnešek jsme si slíbili ještě jednu, složitější, ale lepší možnost.

V čem je problém?

Proč vůbec hledat jinou možnost? Inu, ono je to poměrně jasné: jméno disku je "uživatelská" záležitost, a každý může kterýkoli disk pojmenovat jak se mu jen zachce. Pokud tedy označíme disky pro automatické montování prostřednictvím souboru /etc/fstab prostřednictvím jejich jmen, vyhneme se sice náhodnému přiřazení, jež by hrozilo při použití názvů zařízení, ale stále riskujeme problémy v případě, že se v systému náhodou objeví dva disky téhož jména.

To je samozřejmě snadno možné, zvlášť s výměnnými či externími disky. Mac OS X se s takovou situací bez obtíží dokáže vyrovnat — při montování prostě jednomu z disků přidělí vygenerované jméno, doplněné pořadovým číslem; jsme ovšem opět vydáni napospas náhodě v tom, který z disků to bude. Dokonce i v případě, že fstab náhodou vybere ten správný, může se někdy stát, že ten druhý disk se stejným jménem se nenamontuje vůbec...

Řešením je unique ID

Řešení je v principu nesmírně jednoduché: každý disk má přiděleno jednoznačné jméno, tzv. unique ID; ve skutečnosti jde o číslo, obvykle vyjádřené v hexadecimálním tvaru. Mac OS X od verse 10.2 nahoru dovoluje toto číslo použít v tabulce /etc/fstab stejně dobře, jako jméno disku — stačí namísto "LABEL=" použít prefix "UUID=", např. tedy

 UUID=01275004466F2FAA   /private/var/vm   hfs   rw   1   2

To je všechno, a jde rozhodně o nejspolehlivější a nejbezpečnější způsob, jak namontovat požadovaný disk na jméno určené složky. Důvod, proč jsme tomu věnovali samostatný článek, spočívá v tom, že je poměrně komplikované unique ID daného disku zjistit: dokáže to jediný, poměrně málo známý příkaz hfs.util; ten ovšem požaduje znakové zařízení, jež odpovídá danému disku... inu, raději si postup popíšeme krok po kroku:

1. Zařízení, odpovídající disku

Zjistit, které jméno zařízení odpovídá kterému disku, už umíme — můžeme k tomu použít třeba standardní příkaz mount, jenž bez parametrů prostě vypíše co kam je momentálně namontováno:

 1 ~> mount
 /dev/disk1s8 on / (local)
 devfs on /dev (local)
 fdesc on /dev (union)
 <volfs> on /.vol (read-only)
 /dev/disk0s2 on /Volumes/Music (local)
 /dev/disk2s8 on /Volumes/Buffer (local)
 /dev/disk2s9 on /Volumes/OSXSHomeOnTwo (local)
 /dev/disk2s12 on /Volumes/Mac_OS_X (local)
 automount -fstab [340] on /Network/Servers (automounted)
 automount -static [340] on /automount (automounted)
 2 ~> 

Vidíme, že disk "Buffer" odpovídá zařízení /dev/disk2s8.

2. Příkaz hfs.util vypadá slibně...

Jak můžeme zjistit probírkou informací z příkazu man, unique ID disku nám zjistí příkaz hfs.util (to se samozřejmě týká disků ve formátu HFS; pro daleko rozumnější, avšak bohužel špatně podporovaný formát UFS bychom potřebovali ufs.util).

Podle stránek nápovědy tento příkaz zobrazí unique ID disku, pokud použijeme přepínač -k a jméno zařízení; pokud to ovšem zkusíme, narazíme na několik nepříjemných a špatně zdokumentovaných podrazů:

 2 ~> hfs.util -k /dev/disk2s8
 zsh: command not found: hfs.util
 3 ~> 

3. ... je ovšem mimo PATH, a smí jej použít jen supervisor ...

Jak je vidět, příkaz hfs.util není uložen v žádné ze složek, jež jsou standardně součástí proměnné PATH, takže shell jej neumí najít. Musíme si jej najít sami (nejjednodušší je použít dávno známý příkaz locate) a volat přímo s plnou cestou /System/Library/Filesystems/hfs.fs ... jak je ale vidět, pořád nejsme z lesa venku:

 3 ~> /System/Library/Filesystems/hfs.fs/hfs.util -k /dev/disk2s8
 You must be root to run /System/Library/Filesystems/hfs.fs/hfs.util.
 4 ~> 

Tento problém umíme vyřešit snadno, známe již přece příkazy su a sudo. Nicméně... ani po přepnutí do rootovského konta se problémů nezbavíme:

 1 ~# /System/Library/Filesystems/hfs.fs/hfs.util -k /dev/disk2s8
 2 ~# 

4. ... vyžaduje jméno znakového zařízení bez /dev/, a nezapisuje konec řádku!

Asi nejzáludnější trik příkazu hfs.util spočívá v tom, že požaduje jméno znakového zařízení, a ještě k tomu si prefix /dev/ doplní sám (takže pokud jej použijeme, zařízení nenajde a nevypíše nic).

Co je to znakové zařízení? Inu, pro každý disk unix nabízí ne jedno, ale dvě zařízení: to první, používané ve většině případů, zajišťuje blokový přístup k obsahu disku; to druhé nabízí přístup znak po znaku. To je samozřejmě v obecném případě pomalejší, ale zato flexibilnější. Podle unixových konvencí se znaková zařízení jmenují stejně jako bloková, navíc však mají prefix "r-". Následující příkaz je už skoro dobře:

 2 ~# /System/Library/Filesystems/hfs.fs/hfs.util -k rdisk2s8    
 3 ~# 

Poslední podraz, který si na nás hfs.util vymyslel, je velice prostý (ale zvlášť ve spojení s ostatními triky dokáže potrápit): výpis unique ID je totiž na jediném řádku, a ten není ukončen znakem LF! Shell proto obsah řádku ihned přepíše novým promptem, a nevidíme nic. Asi nejjednodušší je vyžádat si hned po provedení příkazu hfs.util ještě vypsání prázdného řádku dávno známým příkazem echo:

 3 ~# /System/Library/Filesystems/hfs.fs/hfs.util -k rdisk2s8 ; echo
 01275004466F2FAA
 4 ~# 

A je to!

To je konečně řešení: chceme-li pro namontování pevného disku použít v tabulce /etc/fstab jeho unique ID, musíme nejprve nalézt jméno odpovídajícího zařízení pomocí příkazu mount, odstranit prefix /dev/ a naopak přidat r, a pak spustit příkaz hfs.util tak, jak je vidět v posledním příkladu. Výsledné unique ID pak můžeme použít s "UUID=" v tabulce fstab.

Dnes jsme konečně uzavřeli povídání o virtuální paměti, a příště se pustíme do dalších zdrojů, jež procesy využívají — konkrétně se podíváme na otevřené soubory (a další komunikační kanály) a příkaz lsof.

Obsah seriálu (více o seriálu):

Tématické zařazení:

 » Rubriky  » Služby  

 » Rubriky  » Agregator  

 

 

 

Nejčtenější články
Nejlépe hodnocené články
Apple kurzy

 

Přihlášení k mému účtu

Uživatelské jméno:

Heslo: