Co se děje při přejmenování souboru?

Co se děje při přejmenování souboru?
« kdy: 14. 08. 2015, 22:16:54 »
Nevite nekdo, co se fyzicky deje se souborem pri jeho prejmenovani? Smaze se a vytvori se novy, jak by napovidal popis prikazu mv? A pokud uz existuje soubor daneho jmena, co se fyzicky stane s nim?
« Poslední změna: 15. 08. 2015, 02:56:37 od Petr Krčmář »


JardaP .

  • *****
  • 11 064
    • Zobrazit profil
    • E-mail
Re:Co na disku zpusobi prejmenovani souboru?
« Odpověď #1 kdy: 14. 08. 2015, 22:38:26 »
Si vemte soubor tak 1 GB. Zkuste mv na jiny FS a mv do jineho adresare na temze FS. Schvalne, co myslite, ze se stane?

Kit

Re:Co na disku zpusobi prejmenovani souboru?
« Odpověď #2 kdy: 14. 08. 2015, 23:31:52 »
Nevite nekdo, co se fyzicky deje se souborem pri jeho prejmenovani? Smaze se a vytvori se novy, jak by napovidal popis prikazu mv? A pokud uz existuje soubor daneho jmena, co se fyzicky stane s nim?

Při přejmenování v rámci jednoho souboru se pouze změní jeho název. Totéž se děje při přesunu mezi adresáři v rámci souborového systému.

Pokud cílový název souboru již existuje, je odebrán původnímu souboru a přidělen novému souboru. Pokud byl jediným názvem původního souboru, bude tímto smazán. Je to atomická operace - dá se tímto způsobem simulovat transakce.

Re:Co se děje při přejmenování souboru?
« Odpověď #3 kdy: 15. 08. 2015, 12:12:28 »
Diky. Je to pro me trochu prekvapive. Myslel bych si, ze pri delsim novem nazvu nebo presunu do jineho adresare, dojde k preskupeni (realokaci) dat.

Jen bych jeste dodal, ze fyzicky se to vlastne nemaze.

dfffgcc

Re:Co se děje při přejmenování souboru?
« Odpověď #4 kdy: 15. 08. 2015, 12:32:54 »
v ramci jednoho fs se jen pocachruje s metadaty o souboru a s vlastnimi daty se nedeje nic.


Re:Co se děje při přejmenování souboru?
« Odpověď #5 kdy: 15. 08. 2015, 12:33:39 »
Diky. Je to pro me trochu prekvapive. Myslel bych si, ze pri delsim novem nazvu nebo presunu do jineho adresare, dojde k preskupeni (realokaci) dat.

Jen bych jeste dodal, ze fyzicky se to vlastne nemaze.

V ext3 je soubor uložen pod číslem, a ne pod jménem. Říká se mu inode. Jméno není nic jiného, než záznam v adresáři, že se váže k nějakému inode. Přejmenování, či přesunutí v rámcí filesystému tedy neznamená nic jiného, než vytvoření nového záznamu se stejným odkazem na inode a smazání starého záznamu, přičemž soubor stále existuje pod stejným inode, tam se nic nemění.

Takhle to funguje i ve FAT. Tam je místo inode číslo prvního sektoru, kde se soubor fyzicky na disku nachází. Další číslo sektoru si pak OS odvodí právě z tabulky FAT, podle níž byl tento filesystem pojmenován.

Při přesunu na jiný filesystém je ovšem nutné soubor fyzicky zkopírovat a následně na původním místě smazat. Během této operace tedy soubor částečně existuje na dvou místech současně, což může být problém.

Re:Co se děje při přejmenování souboru?
« Odpověď #6 kdy: 15. 08. 2015, 13:09:53 »
Metadata o souborech (název, velikost, datum vytvoření, oprávnění atd.) jsou v souborovém systému uložena zvlášť, samotná data souboru také zvlášť. A adresář je v unixových systémech jenom zvláštní typ souboru, který v datech má uložen seznam souborů (tj. i adresářů), které jsou v něm. Takže někde na disku je uložen seznam souborů v adresáři A, a v tom seznamu je uvedeno například "soubor se jmenuje X, byl vytvořen tehdy a tehdy, vlastníkem je uživatel U, samotná data souboru začínají na disku na pozici P a soubor je dlouhý S bajtů". Takže když soubor přesouváte v rámci jednoho souborového systému, vezme se tenhle záznam a přesune se do jiného adresáře - se samotnými daty na disku se ale nijak nehýbe.

Tolik ten nejjednodušší popis, ve skutečnosti je to komplikovanější - např. data souboru nemusí být uložena souvisle, takže tam nebude jen "začíná na pozici P", ale musí tam být seznam, kde jsou jednotlivé části. A dále ve skutečnosti není v adresáři přímo odkaz na ten soubor, ale je tam jen jeho jméno a odkaz na tzv. inode, což je unikátní číslo souboru v rámci souborového systému. A těch odkazů na jeden inode může být víc (to jsou v unixu pevné odkazy, hardlinky - víc názvů souboru odkazuje na jeden inode a tedy na jeden soubor). Ty odkazy na inody nemusí být jen v souborovém systému, může je mít třeba také aplikace v paměti. A když zanikne poslední odkaz na inode, přestane daný soubor být dosažitelný a operační systém si místo, které zabírala jeho data, označí jako volné. Takže když přejmenujete soubor na jméno jiného existujícího souboru, smaže se v adresáři ten záznam se jménem, který odkazuje na nějaké inode, a místo něj se vloží nový, se stejným jménem, který odkazuje na inode toho přejmenovávaného souboru. Pokud byl ten původní odkaz na soubor poslední, ten původní soubor se smaže. Je ale možné, že na ten soubor odkazoval ještě jiný záznam v souborovém systému, pak bude ten původní soubor dostupný pod tímto jiným jménem. Nebo ten soubor mohla mít otevřený nějaká aplikace, pak pro ni bude stále dostupný, až do uzavření toho souboru nebo ukončení aplikace. A také může nastat případ, že ten soubor už nebyl dostupný z jiného adresáře, ale pouze byl otevřený v aplikaci - takže pro všechny jakoby zmizel a zůstává viditelný jen pro tu aplikaci. Ta aplikace ale může zase do nějaké adresáře zapsat odkaz na ten soubor, a tím se ten soubor zase "objeví" i pro ostatní.

Pokud soubor přesouváte na jiný souborový systém, soubor se nejprve zkopíruje a na konci se ten původní smaže. (Jak plyne z předchozího, kopírovací aplikace by si ho mohla nejprve otevřít, pak smazat a pak teprve kopírovat - dokud by jej měla otevřený, může z něj pořád číst a k jeho fyzickému smazání nedojde. Jenže pak by hrozilo, že se něco pokazí, aplikace například havaruje, a pak byste původní soubor neměl a v cílovém souborovém systému by byla jen jeho část.)

Kit

Re:Co se děje při přejmenování souboru?
« Odpověď #7 kdy: 15. 08. 2015, 13:23:01 »
Metadata o souborech (název, velikost, datum vytvoření, oprávnění atd.) jsou v souborovém systému uložena zvlášť, samotná data souboru také zvlášť. A adresář je v unixových systémech jenom zvláštní typ souboru, který v datech má uložen seznam souborů (tj. i adresářů), které jsou v něm. Takže někde na disku je uložen seznam souborů v adresáři A, a v tom seznamu je uvedeno například "soubor se jmenuje X, byl vytvořen tehdy a tehdy, vlastníkem je uživatel U, samotná data souboru začínají na disku na pozici P a soubor je dlouhý S bajtů". Takže když soubor přesouváte v rámci jednoho souborového systému, vezme se tenhle záznam a přesune se do jiného adresáře - se samotnými daty na disku se ale nijak nehýbe.

Tohle možná platí u některých FS, ale třeba u EXT2/3/4 to neplatí: Data jsou zvlášť, metadata jsou zvlášť a názvy souborů v adresářích jsou také zvlášť. Při změně názvu souboru nebo přesunu mezi adresáři se nemění data ani metadata (inode) - pouze název souboru je vymazán z jednoho adresáře a vložen do jiného adresáře.

Re:Co se děje při přejmenování souboru?
« Odpověď #8 kdy: 15. 08. 2015, 13:56:56 »
Tohle možná platí u některých FS, ale třeba u EXT2/3/4 to neplatí: Data jsou zvlášť, metadata jsou zvlášť a názvy souborů v adresářích jsou také zvlášť.
Některé souborové systémy (např. ReiserFS) zase ukládají data malých souborů přímo do metadat. To jsou ale implementační detaily. Podstatné je to, že uložení dat na disku nevypadá tak, že by byl uložen adresář, v něm název souboru, pak jeho data, pak název dalšího souboru v adresáři, zase jeho data atd. Takže když se přesouvá soubor v rámci jednoho souborového systému, obsah souboru (obvykle) zůstává na svém místě a šíbuje se jen s metadaty.

Kit

Re:Co se děje při přejmenování souboru?
« Odpověď #9 kdy: 15. 08. 2015, 15:00:58 »
Takže když se přesouvá soubor v rámci jednoho souborového systému, obsah souboru (obvykle) zůstává na svém místě a šíbuje se jen s metadaty.

Právěže s metadaty souboru se také nehýbe. Název souboru totiž v těch metadatech vůbec není - je v datech adresáře.

P_V

  • ***
  • 227
    • Zobrazit profil
    • E-mail
Re:Co se děje při přejmenování souboru?
« Odpověď #10 kdy: 16. 08. 2015, 11:17:20 »
Proč se adresáři říká zrovna "adresář"?

Kit

Re:Co se děje při přejmenování souboru?
« Odpověď #11 kdy: 16. 08. 2015, 11:33:52 »
Proč se adresáři říká zrovna "adresář"?

Možná proto, že jsou v něm uloženy adresy fyzického uložení souborů a podadresářů. Ve své podstatě je to KVS, tedy slovník.

Proč se adresářům někdy říká "složka" (angl. "folder")?

P_V

  • ***
  • 227
    • Zobrazit profil
    • E-mail
Re:Co se děje při přejmenování souboru?
« Odpověď #12 kdy: 16. 08. 2015, 11:57:05 »
"jsou v něm uloženy adresy fyzického uložení"
To je ale velice user unfriendly název. BFU by pod tím označením mohl očekávat třeba seznam emailových adres. BFU nebude studovat implementační detaily aby mu ten název něco řekl...
Složka je uživatelskému chápání mnohem bližší, protože odpovídá obvyklému uspořádání papírových dokumentů. Včetně toho že ve složce můžou být podsložky.

Kit

Re:Co se děje při přejmenování souboru?
« Odpověď #13 kdy: 16. 08. 2015, 12:28:14 »
Složka je uživatelskému chápání mnohem bližší, protože odpovídá obvyklému uspořádání papírových dokumentů. Včetně toho že ve složce můžou být podsložky.

Jenže soubory v adresáři nejsou - dokonce tam nejsou ani jejich metadata. Pouze názvy a adresy na i-node. Proto adresář.

Je to podobné, jako kdybych si udělal kartičkový systém, na kterém by byl název součástky a údaj o tom, kde se fyzicky nachází. Pak bych ten systém nemohl pojmenovat "skříň", ale "kartotéka".

C-S

Re:Co se děje při přejmenování souboru?
« Odpověď #14 kdy: 16. 08. 2015, 12:40:46 »

Složka je uživatelskému chápání mnohem bližší, protože odpovídá obvyklému uspořádání papírových dokumentů. Včetně toho že ve složce můžou být podsložky.
Bližší možná, ale jako popis reality je to naprosto mimo. Zatímco adresářů se stejnou adresou můžu mít víc, těžko nastane situace kdy bych měl v několika papírových složkách fyzicky identický dokument.