[Megoldva] Memdiskhez fájl rendszer.

Hi mindenki!

Kérdezném a közösséget, hogy van-e olyan fájl rendszer, ami zramra telepíthető és (most jön a neheze), ha törlik róla az adatokat, akkor visszazsugorodik minimális (eredeti) méretére.
Próbáltam hagyományos FS-eket (ext2, ext4, btrfs,) és flash alapút is (F2FS).
De mindegyiknél ugyanaz a probléma: induláskor még jó a memfoglalás, írok rá -> elfoglal annyit amennyi szükséges, de miután törlöm a rá felmásolt adatot (tehát üres a "meghajtó") marad a memfoglalás ugyanannyi. Nem szabadítja fel önmagán a keletkezet helyet.
Tehát: egy dinamikusan növekvő/csökkenő fájl rendszert keresek memdisk-re.

Kösz mindenkinek. Üdv.

Hozzászólások

A legtöbb fájlrendszerben normál esetben csak a fájlra mutató bejegyzés törlődik és a tartalom maga nem íródik felül nullákkal, szerintem ezért nem csökken a tömörített méret.

Próbáld ki ezt: zerofree
http://manpages.ubuntu.com/manpages/precise/man8/zerofree.8.html

Szerk:
Használj ext4 fájlrendszert discard opcióval. Elvileg zram érti és felszabadítja a területet (akár egy SSD).
Forrás: https://code.google.com/p/compcache/issues/detail?id=98
(ez azóta elvileg bekerült a kernelbe)

Na. Kipróbáltam ext4-et zerofree-vel kombinálva. Félsiker: kicsit körülményes, és nem automatikus, de végülis eléri a célt. Még futok a problémával 1-2 kört. Aztán meglátjuk.
De kösz a tippet mégegyszer.

---------------------------------------------------------------
Ritkán szólok hozzá dolgokhoz. Így ne várj tőlem interakciót.

+1 a tmpfs-nek
tmpfs automatikusan kikerül swapre, ha szükséges. A swapot pedig úgy konfiguráld, hogy a zramon létrehozottnak legyen nagyobb prioritása.
-----
“Firefox, you say? No I don't play Pokémon”

Sejtem hogy gondolod, de ez így már nem biztos hogy jó nekem. Túl körülményes. A lényeg hogy ideiglenesen szükséges, de a háttérben mindig elérhető megoldás kell. Ami ha nem használom, szinte észrevehetetlen.

---------------------------------------------------------------
Ritkán szólok hozzá dolgokhoz. Így ne várj tőlem interakciót.

Tehát a megoldás: Röviden: végül a TMPFS győzött. Ugyan próbáltam hagyományos block(?) alapú fájl rendszereket (ext*, btrfs, F2fs), de nem volt gördülékeny/automatikus. Csak valami scripttel, és harmadik progival megoldható a kívánt működés.
Hosszabban: Abból indultam ki, hogy a zram alapból tömörít. Így elvileg bármit húzok is rá, kis helyet fog foglalni. Ext*-ekkel ez működött is, csak beragadt a helyfoglalás. És azért 1,6 giga a memcsiből csak úgy, azért sok. A discard sem használt. Az fstrimmet ki se próbáltam mert..... tettem egy próbát a TMPFS-sel. És láss csodát: egyből és egy paranccsal ment.
A méretfoglalásról csak annyit, hogy amíg van helye, addig kétszeresen foglal. Mert ugye a zram, és lemez cache is. De ha fogytán a mem, akkor a lemez cachet újrahasznosítja. A tömörítésről sem tudok még nyilatkozni, mert nincs nagy mennyiségű, jól tömöríthető fájlom. Bár df -h szerint 2-2,5 gigám van a memdisken. Mindegy. Így nekem most megfelelő. A célomra tökéletes.
Azért idebiggyesztem a parancsokat (nulláról):
modprobe zram num_devices=1; echo 1600M > /sys/block/zram0/disksize; mount -o noexec -t tmpfs /dev/zram0 /mnt/memdisk; chmod a+w /mnt/memdisk
ez a legutolsó szerintem elhagyható. Én biztos ami biztos alapon használom.
És én speckó az rc.local-ban használom, de bárhova máshova is rakható (gondolom).

Nos. Köszönöm a javaslatokat, ötleteket. Szeretek ide járni gondolkodni.

Üdv mindenkinek.

---------------------------------------------------------------
Ritkán szólok hozzá dolgokhoz. Így ne várj tőlem interakciót.

Mire gondolsz a "biztos jól működik?" alatt. Lehet ez egy újabb verzió? Használat alatt szépen nyomon követhető a változás free -m -el. A shared-be dolgozik. És min mondtam a df szerint is "létező" lemez.

---------------------------------------------------------------
Ritkán szólok hozzá dolgokhoz. Így ne várj tőlem interakciót.

Biztos jól működik? = reboot után marad bármi a tartalmából? valóban a zramban tárolja az adatokat?

Mert a tmpfs a virtuális memória (RAM + swap terület) éppen kihasználatlan blokkjaiban tárol adatot, rebootnál a tartalma elveszik. A tmpfs mount úgy néz ki, hogy a block device mezőbe random bármit írhatsz (tipikus: none), mert ő nem használ block device-t, hiszen nem perzisztens a tárolása, nincs is rá szüksége.

Ha ez a célod, akkor minden szép és jó, bár nem értem, hogy minek a zram hozzá, mert az szerintem nem tesz hozzá a tmpfs működéséhez már semmit se...

Arra a kérdésedre a válasz hogy nem baj-e ha felejt, a válasz hogy nem. Nem az a cél hogy ne felejtsen, hanem hogy ideiglenesen legyen elérhető egy fájl. Az eredetije tárolva van máshol.

---------------------------------------------------------------
Ritkán szólok hozzá dolgokhoz. Így ne várj tőlem interakciót.

mount -o noexec -t tmpfs /dev/zram0 /mnt/memdisk
itt a dev/zram0 helyett irhatnal csigabigabatkamano-t is, nincs ertelme, mert a tmpfs mindig memoriabol (ram + swap) veszi a helyet, ezt a parametert figyelmenkivul hagyja.

a zram eszkozt swapkent tudod hasznalni, amit igy majd a tmpfs is fogja (meg a firefox 100 tabbal :D)
mkswap /dev/zram0
swapon /dev/zram0 -p 10

--
A vegtelen ciklus is vegeter egyszer, csak kelloen eros hardver kell hozza!

Hmmm... ebben igazad van. Úgy látszik alaposabban tesztelnem kell ezt a megoldást. Csak azt nem értem, hogy hogy foglal kevesebb helyet a másolt fájl, mint amennyi ő maga? Vagy félreértelmeznék valamit? Na majd utánajárok.

---------------------------------------------------------------
Ritkán szólok hozzá dolgokhoz. Így ne várj tőlem interakciót.