Portál AbcLinuxu, 20. července 2025 23:38


Dotaz: cp/vim nepřeruší hardlink, mv ano

26.2.2013 17:03 1john2 | skóre: 35 | blog: jo12hn | zlín, brno
cp/vim nepřeruší hardlink, mv ano
Přečteno: 363×
Odpovědět | Admin
Dobrý den, zjistil jsem zajímavou věc.

Vytvořím textový soubor foo s obsahem foo.

Udělám hardlink ln foo bar.

Zedituju hardlink bar pomocí vimu.

Očekával bych, že se hardlink přeruší a budu mít dva soubory na 2 inodech, ale nestane se.

Zkopíruju do hardlinku jiný textový soubor, stejné chování jako u vimu. Našel jsem na netu, že by měl existovat přepínač, který toto chování řeší, ale v manu jsem ho nenašel.

Při použití mv textak bar, se hardlink přeruší.

Testováno na debian squeeze 2.6.32-5-amd64 a gentoo 3.6.11 s vlastní konfigurací.

Napadá někoho, kde hledat chybu?
Nástroje: Začni sledovat (1) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

26.2.2013 17:17 Michal Kubeček | skóre: 72 | Luštěnice
Rozbalit Rozbalit vše Re: cp/vim nepřeruší hardlink, mv ano
Odpovědět | | Sbalit | Link | Blokovat | Admin
Napadá někoho, kde hledat chybu?

Jakou chybu? Podle mne jste jen popsal, že vim se chová jako rozumný editor pro unixové filesystémy s hardlinky a cp a mv se chovají přesně tak, jak je logické od nich očekávat.

26.2.2013 19:17 potato
Rozbalit Rozbalit vše Re: cp/vim nepřeruší hardlink, mv ano
Od cp lze očekávat obojí. Je to otázka, které atributy zdroje má získat i cíl. Proto taky má cp volbu --preserve=links, která zajistí, že se chová naopak.
26.2.2013 17:48 chrono
Rozbalit Rozbalit vše Re: cp/vim nepřeruší hardlink, mv ano
Odpovědět | | Sbalit | Link | Blokovat | Admin
V nastaveniach vim treba pozrieť backupcopy a backup.
26.2.2013 19:01 kuka
Rozbalit Rozbalit vše Re: cp/vim nepřeruší hardlink, mv ano
Odpovědět | | Sbalit | Link | Blokovat | Admin
Zajimave by spis bylo, kdyby se cp a mv chovalo jinak. A na zaklade ceho by mela editace souboru resit inody mi take neni jasne. Mozna na to ma vim nejake nastaveni, jak tu nekdo pise, ale moc smysluplne by to nepripadalo. Neni zadna explicitni operace "preruseni hardlinku" a pouzivat hardlink jako jakysi copy-on-write by byl ponekud ulet. Takze chybu bych osobne tipoval v nespravnem pochopeni na tve strane.
26.2.2013 19:07 Michal Kubeček | skóre: 72 | Luštěnice
Rozbalit Rozbalit vše Re: cp/vim nepřeruší hardlink, mv ano
Jsou dvě možnosti, jak se může editor zachovat: buď původní soubor přepíše novým obsahem nebo ho smaže a vytvoří nový. V prvním případě se hardlink zachová, ve druhém se rozpadne. Pokud se vytváří záložní soubor, tak v první variantě se vytvoří záložní jako kopie ostrého a pak se ostrý přepíše, ve druhé se ostrý přejmenuje na záložní (pokud už existoval starší záložní, smaže se) a vytvoří se nový ostrý. Kvůli hardlinkům a zachování práv a dalších atributů osobně preferuji první variantu.
26.2.2013 19:13 kuka
Rozbalit Rozbalit vše Re: cp/vim nepřeruší hardlink, mv ano
Hardlinky jsou mensinova zalezitost, ale na prava by se narazilo velice rychle. Opravdu neocekavam, ze by se mi prostou editaci textaku zmenil napriklad jeho vlastnik. Jestli to editor umozni jako volbu tak proc ne, ale nemuze snad existovat editor, kde by toto byl default.
27.2.2013 02:32 Andrej | skóre: 51 | blog: Republic of Mordor
Rozbalit Rozbalit vše Re: cp/vim nepřeruší hardlink, mv ano
Odpovědět | | Sbalit | Link | Blokovat | Admin

Mícháš dohromady dvě odlišné věci:

27.2.2013 08:24 1john2 | skóre: 35 | blog: jo12hn | zlín, brno
Rozbalit Rozbalit vše Re: cp/vim nepřeruší hardlink, mv ano
Odpovědět | | Sbalit | Link | Blokovat | Admin
Asi jsem měl včera vysvětlit, o co se mi jedná.

Cíl tohoto hraní je, mít adresář reference ze kterého povedou linky do adresáře share, sdíleného sambou. Ve chvíli kdy samba nahraje do share soubor, link se přeruší a v share bude nová verze souboru.

Pochopil jsem, že když použiju hardlink, tj. 2 různá jména pro jeden soubor, dojde při souborových operacích samby k jeho přerušení a získám dva soubory.

Chtěl bych se zeptat, jak toto realizovat, když ne pomocí hardlinku?
27.2.2013 09:01 potato
Rozbalit Rozbalit vše Re: cp/vim nepřeruší hardlink, mv ano
Nijak, jelikož ,samba nahraje soubor` může znamenat jak to, že se prostě změní obsah souboru, tak to, že se soubor nahradí. První případ automaticky převést na druhý AFAIK nelze. Nedělá to ani cp --reflink, protože to je pouze nízkoúrovňové sdílení dat, každý soubor má od začátku vlastní inode, takže se nikdy žádný link nepřerušuje. Pokud ovšem ve skutečnosti nechceš linky, pouze šetřit bloky na disku pomocí CoW, tak cp --reflink na btrfs je odpověď.
27.2.2013 09:09 1john2 | skóre: 35 | blog: jo12hn | zlín, brno
Rozbalit Rozbalit vše Re: cp/vim nepřeruší hardlink, mv ano
ano skutecne mi jde o setreni mista, jdu se podivat na ten btrfs, je pro me ponekud "exoticky".

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.