Jak provést trim souboru (skutečný i marshalovaný)

macík

Jak provést trim souboru (skutečný i marshalovaný)
« kdy: 01. 01. 2019, 22:01:23 »
Mám takový netypický požadavek. Mám soubor o Velikosti 1000 Jednotek (například 42 GB). A chtěl bych provést Trim toho souboru (z konce) těmito způsoby, obojí, aniž by se na disk zapisovala (již existující v originálním souboru) jakákoli data:
1. Nejdřív na zkoušku například zmenšit na 12 GB od začátku,  uvidím co to udělá, jestli to smaže i data která potřebuji (use case: třeba video o variabilním bitrate). Když se mi to zdá moc, tak to chci oříznout na 20 GB. A tak dál ... Konceptuálně to myslím něco jako. Něco jako union/fs . Tedy nemusí (a asi nepůjde) udělat "nový soubor" na původním filesystému. Ale něco jakou mount / losetup... JE to vlastně ono, losetup (případně hidutil, diskutil, hdiutil). To

2. Jako konečné řešení. Tzn že jakmile provedu operaci "smazání"/"řezu" (například 42 GB - 16GB=26GB), na filesystému se uvolní místo 26GB. Z logiky věci musí jít o úpravu v původním FS.




Filesystém je NTFS, exfat, btrfs.
Otázka na nerdy: Je možné udělat (sym)link na  soubor, který bude jako "obálka na souboru", že bude ukazovat jen výřez ze souboru?


Honza

Re:Jak provést trim souboru (skutečný i marshalovaný)
« Odpověď #1 kdy: 01. 01. 2019, 22:29:15 »
Jestli chápu správně bod číslo 1), tak to jistě půjde (tak, že se změní jen metadata toho souboru - záleží na filesystému).
Bod 2) samozřejmě také lze, přes loopback, mám takto připojenou raw image disku s několika oddíly, a každý filesystém v těch oddílech je namapovaný do svého vlastního adresáře. A to funguje i read-write.

Honza

Re:Jak provést trim souboru (skutečný i marshalovaný)
« Odpověď #2 kdy: 01. 01. 2019, 22:38:06 »
Ta druhá odpověď měla patřit k tomu "obálka na souboru"...
Ale pokud je to video stream, tak to bude asi dost těžké říznout v tom správném místě...
A ještě by se mohlo hodit připravit dopředu filesystém tak, aby ten soubor byl vcelku (pomocí fallocate)

Uuuu

Re:Jak provést trim souboru (skutečný i marshalovaný)
« Odpověď #3 kdy: 01. 01. 2019, 22:42:59 »
To jsou podle me veci primo na fs.
pripadne memory mapped file.

the

Re:Jak provést trim souboru (skutečný i marshalovaný)
« Odpověď #4 kdy: 01. 01. 2019, 23:58:05 »
Není moc pravděpodobné udělat ten výřez ale je možné vzít ten výřez a skrytý soubor z pokračováním/koncem nebo dva s pokračováním a koncem a ty části slinkovat do jednoho souboru.


Re:Jak provést trim souboru (skutečný i marshalovaný)
« Odpověď #5 kdy: 02. 01. 2019, 08:12:15 »
2. Jako konečné řešení. Tzn že jakmile provedu operaci "smazání"/"řezu" (například 42 GB - 16GB=26GB), na filesystému se uvolní místo 26GB. Z logiky věci musí jít o úpravu v původním FS.
Např. příkaz truncate.


Filesystém je NTFS, exfat, btrfs.
Na btrfs jde bod 1 udělat pomocí snapshotů, na exFAT ne, na NTFS asi něco jako snapshoty je, ale pochybuju, že to umí linuxový ovladač NTFS.

Otázka na nerdy: Je možné udělat (sym)link na  soubor, který bude jako "obálka na souboru", že bude ukazovat jen výřez ze souboru?
Ne.

Janeba

Re:Jak provést trim souboru (skutečný i marshalovaný)
« Odpověď #6 kdy: 02. 01. 2019, 08:26:35 »
Nevím jestli sem úplně pochopil, ale co vim tak některé typy (video) souboru maji metadata na konci... Tak to asi nepůjde univerzálně...

grg

Re:Jak provést trim souboru (skutečný i marshalovaný)
« Odpověď #7 kdy: 02. 01. 2019, 10:41:07 »
Celkom mi nie je jasné, či tie údaje uvedené v otázke sú reálne, alebo len príkladom pre ilustráciu.

Lebo ak ide o súbory ~40 GB, tak tam by som sa s tým príliš nepáral a jednoducho urobil rozdelenie súboru vykopírovaním jednotlivých častí, tých pár minút by som si radšej počkal. Má to výhodu, že keď zarežeš nesprávne, môžeš to ľubovoľne veľakrát opakovať.

Ak by išlo o oveľa väčšie objemy, tak tam by to možno zmysel malo, ale aj tak je to pomerne špecifický use case.

dfasdfasdf

Re:Jak provést trim souboru (skutečný i marshalovaný)
« Odpověď #8 kdy: 02. 01. 2019, 11:08:01 »
Celkom mi nie je jasné, či tie údaje uvedené v otázke sú reálne, alebo len príkladom pre ilustráciu.

Lebo ak ide o súbory ~40 GB, tak tam by som sa s tým príliš nepáral a jednoducho urobil rozdelenie súboru vykopírovaním jednotlivých častí, tých pár minút by som si radšej počkal. Má to výhodu, že keď zarežeš nesprávne, môžeš to ľubovoľne veľakrát opakovať.

Ak by išlo o oveľa väčšie objemy, tak tam by to možno zmysel malo, ale aj tak je to pomerne špecifický use case.

pokud ma malo mista na disku a chce primo pracovat nad daty tak ovsem bude potrebovat velkou RAM, kde to muze zpracovavat, nebo to bude na vice iteraci, aby nejake data nacetl, osekal a zapsal na stejne misto na disku.

RDa

  • *****
  • 2 465
    • Zobrazit profil
    • E-mail
Re:Jak provést trim souboru (skutečný i marshalovaný)
« Odpověď #9 kdy: 02. 01. 2019, 11:25:44 »
Pokud se jedna o video soubor, tak by operace mela byt:
  • nacist metadata
  • zavolat truncate na zmenseni velikosti
  • prepsat metadata aby zkraceny soubor byl logicky korektni, napr. pres fopen(..,rw)+seek

Nektere specialni systemy dokonce podporuji lepit dva soubory dohromady (na FAT, exFAT) - videl jsem to napr. ve fotaku, ze to (variabilne dlouha) metadata od nahravaneho videa zapise "pred" data, tam to funguje takto:
  • vytvari se zmuxovany audio/video stream, index se drzi v RAM
  • po ukonceni zaznamu se index zapise na kartu v cilovem formatu
  • index se zarovna na cluster size, vznikne tim hlavicka video souboru
  • puvodni binarni videostream se napoji za hlavicku a vznikne finalni soubor

Skoda ze v linuxu neni takova funkctionalita, co by dovolila "editovat" soubor na teto blokove urovni (insert, delete, join, split).

K druhe otazce - lze udelat jen vysek jako block device:
Kód: [Vybrat]
losetup [-o offset] [--sizelimit size]
« Poslední změna: 02. 01. 2019, 11:27:41 od RDa »