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:
Informace
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):
- Obcování s ďáblem
- Obcování s ďáblem 2 - základy
- Obcování s ďáblem 3 - Práce se soubory
- Obcování s ďáblem 4 - Další práce se soubory
- Obcování s ďáblem 5 - Stále soubory, hlavně linky
- Obcování s ďáblem 6: Pár zbývajících drobností
- Obcování s ďáblem 7: Samá voda, přihořívá, hoří!
- Obcování s ďáblem 8: Jak se do shellu volá, tak se program ozývá
- Obcování s ďáblem 9: Nové finty na programy
- Obcování s ďáblem 10: Do fronty, pánové, do fronty!
- Obcování s ďáblem 11: Standardní vstup a výstup
- Obcování s ďáblem 13: Další triky
- Obcování s ďáblem 14: Vyšší škola hledání souborů
- Obcování s ďáblem 15: Příkaz find stokrát jinak
- Obcování s ďáblem 16: Co se ještě dá uvařit z příkazu find
- Obcování s ďáblem 17: Regulární výrazy
- Obcování s ďáblem 18: Speciální regulární výrazy
- Obcování s ďáblem 19: Skládání regulárních výrazů
- Obcování s ďáblem 20: Regulární výrazy se zpětnými odkazy
- Obcování s ďáblem 21:K čemu je dobrý grep...
- Zázraky ihned, nemožné na počkání: sed
- Obcování s ďáblem - další finty s příkazem sed
- Rozsáhlejší příklad se sedem
- Obcování s ďáblem: Další kouzla, aneb awk
- Awk a proměnné
- Obcování s ďáblem 27: Awk a výrazy
- Obcování s ďáblem: Awk a funkce
- Awk a příkazy
- Co je to vlastně "uživatel"?
- Vlastnictví objektů
- Přístupová práva
- Vlastník, skupina, ostatní...
- Jak je to se skupinami?
- Skupiny a uživatelé
- Scripty
- Komentáře, a volba shellu
- Pro skript může být shell cokoli!
- Shellové skripty a argumenty
- Skripty a proměnné: aritmetika
- Proměnné shellu, "dědění" hodnot
- Práce s proměnnými
- Práce se jmény souborů
- Pole hodnot
- Další triky kolem polí...
- Standardní proměnné shellu
- Základní příkazy pro skripty
- Příkaz if
- Speciální podmínkové příkazy
- Podmínky pro práci se soubory
- Jednoduchý cyklus
- Příkaz for a pomocné příkazy break a continue
- Příkaz case
- Příkazy exit a select
- Rejstřík a přehled
- Procesy
- Informace o procesech
- Další klíčová slova pro příkaz ps
- Příkaz ps: několik praktických přepínačů
- A k čemu že je "ps" dobré?
- Copak procesor, s pamětí je to horší
- Virtuální paměť
- A ještě jednou virtuální paměť
- Zpět k příkazu ps
- Skutečný žrout paměti
- Ještě jednou top
- Doplněk k topu: vm_stat
- Co to tedy všechno znamená?
- Nevychází nám dal a má dáti?
- Kam se stránky ukládají?
- Změna odkládacího disku
- Změna odkládacího disku / fstab
- Poslední poznámka k fstab
- A jak to je se soubory?
- Co vlastně příkaz lsof vypisuje?
- Příkaz lsof a obsah sloupce NAME
- SIPS - Terminál není jen pro nadšence UNIXu
- Tak nám zabili NetInfo, paní Müllerová