Fórum Root.cz
Hlavní témata => Software => Téma založeno: macík 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?
-
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.
-
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)
-
To jsou podle me veci primo na fs.
pripadne memory mapped file.
-
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.
-
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.
-
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ě...
-
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.
-
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.
-
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:
losetup [-o offset] [--sizelimit size]