Linux a NTFS automount

Poměrně často potřebuji přepojovat externí disky mezi počítači se systémy Windows a Linux. Pro Windows je jediným opravdu použitelným systémem NTFS a jelikož ho Linux dnes už velmi dobře zvládá (díky všem vývojářům zapojeným do projektu ntfs-3g), používám ho pro svá data i já.

Na soukromém notebooku mám Windows Vista, ve kterých je – zdá se – jakýsi podivný bug, kdy se zařízení připojená na externí USB hub nezobrazují po kliknutí na ikonku „Bezpečně odebrat hardware,“ a tak nezbývá než disk občas natvrdo od USB odpojit (samozřejmě ve chvíli, kdy se na něj nezapisuje).

Jenže takový disk odmítají současné linuxové distribuce automaticky připojit, protože podle jednoho příznaku poznají, že byl odpojen od „běžících“ Windows. Toto chování lze změnit, ovšem dokumentace jak na to je pramálo. Mně se po několika hodinách podařilo funkční postup najít, a tak se s vámi o čerstvě nabyté zkušenosti podělím.

Moderní linuxové distribuce už obvykle nenutí uživatele používat příkazovou řádku, což je dobře. Výhodou je, že můžete prostě připojit USB flash disk a systém jej automaticky připojí a nabídne vám řádku možností, co s ním dělat dál. Tedy, platí to tehdy, když vše funguje :-)

Když se však objeví nestandardní situace – jako např. ta, kterou jsem popsal v úvodníku tohoto článku – nezbývá, než se zarochnit hluboko do systému a zjistit, co kde přenastavit a upravit, aby se vše chovalo podle vašich představ.

Podobné trable jsem podstoupil i já a dnes se mi konečně podařilo přijít na to, jak systém nakonfigurovat, aby přijal i disk s NTFS, na kterém Windows ponechaly příznak „používá se.“

Problém se projevuje tak, že se po připojení USB disku objeví následující chybová hláška (jak by řekl kamarád, objeví se „Chyba jako prase“):

$LogFile indicates unclean shutdown (0, 0)
 Failed to mount ‚/dev/sdb1‘: Operation not supported
 Mount is denied because NTFS is marked to be in use. Choose one action:

načež se můžete dočíst, že řešením je buď znovupřipojení disku k Windows a následně jeho korektní odpojení, nebo vynuceným ručním připojením disku z příkazové řádky.Problém lze samozřejmě vyřešit spuštěním terminálu a v něm diskový oddíl připojit s parametrem -o force:

mkdir -p /media/usbdisk
 mount -t ntfs-3g -o force /dev/sdb1 /media/usbdisk

Svůj disk posléze naleznete v adresáři /media/usbdisk. To může být jednorázovým řešením, pokud však potřebujete takovéto disky připojovat často, nezbývá než zjistit, kde parametr force nastavit natrvalo.

Automatizace

Nabízí se samozřejmě otázka, jak systému říct, aby to prováděl automaticky. To se liší podle verze tzv. HAL (Hardware Abstraction Layer, jakási vrstva, která má standardizovat komunikaci mezi aplikacemi a hardwarem). Verzi HAL zjistíte, když si ve správci balíčků vyhledáte „hal“. Ti zručnější mohou samozřejmě spustit shell a verzi zjistit pomocí utilit z balíčkovacího systému. :-) V mém případě se v systému používá HAL verze 0.5.11~rc2–1ubuntu8.2.Máte-li distribuce starší než řekněme rok, dva roky, a vaše distribuce stále používá HAL ve verzi nižší než 0.5.10, možná vám bude fungovat následující postup: Jako root uložte následující text do souboru „force.ntfs.mou­nt.fdi“ do adresáře /etc/hal/fdi/po­licy

<?xml version=„1.0“ encoding=„UTF-8“?> <!-- -- SGML -- -->
 <deviceinfo version=„0.2“>
 <device>
   <match key=„block.is_vo­lume“ bool=„true“>
    <match key=„volume.fsu­sage“ string=„filesys­tem“>
     <match key=„volume.fstype“ string=„ntfs“>
      <append key=„volume.mou­nt.valid_opti­ons“ type=„strlist“>for­ce</append>
      <merge key=„volume.po­licy.mount_op­tion.force“ type=„bool“>tru­e</merge>
     </match>
    </match>
   </match>
  </device>
 </deviceinfo>

Pokud je vaše distribuce novější a používá HAL ve verzi 0.5.10 či mladší (např. Ubuntu 8.04, Ubuntu 8.10), musíte provést změny dvě. Nejprve do téhož souboru jako výše (/etc/hal/fdi/po­licy/force.ntfs­.mount.fdi) umístěte následující text:

<?xml version=„1.0“ encoding=„UTF-8“?> <!-- -- SGML -- -->
 <deviceinfo version=„0.2“>
  <device>
   <match key=„block.is_vo­lume“ bool=„true“>
    <match key=„volume.fsu­sage“ string=„filesys­tem“>
     <match key=„volume.fstype“ string=„ntfs“>
      <append key=„volume.mou­nt.valid_opti­ons“ type=„strlist“>for­ce</append>
     </match>
    </match>
   </match>
  </device>
 </deviceinfo>

A poté spusťte pod svým uživatelem program gconf-editor. V něm rozbalte větev/system/stora­ge/default_op­tions/ntfs-3g a na pravé straně dvakrát klikněte na hodnotu mount_options. Otevře se nové okno, kde pomocí tlačítka Přidat (Add) přidejte text „force“ a potvrďte odklikáním tlačítka OK.

Tuto změnu je potřeba provést pod každým uživatelem v systému, který potřebuje mít automaticky připojované nekorektně odpojené NTFS disky.

Proč se postup liší podle verze HAL?

Protože se Linuxová komunita rozhodla změnit umístění parametrů, které toto nastavení ovlivňují. Tzv. volume.policy. a storage.policy. hodnoty, které šly dříve nastavovat v souborech, dnes HAL úplně ignoruje. Místo toho je nyní jedinou cestou, jak tyto parametry nastavit, grafické klikátko, které – promiňte mi ten výraz – připomíná Editor registru z Windows… :-)