Portál AbcLinuxu, 30. dubna 2025 10:29
Zdědil jsem virtuální server na němž je mimo webu také sdílené úložiště přístupné přes WebDAV. Jeho virtuální disk měl pouhých 40GB, což není moc, takže jsem chtěl předejít situaci, že by někdo svými daty vyčerpal veškerou diskovou kapacitu a tak, byť neúmyslně, způsobil jeho kolaps. Mít ho na Btrfs, tak by to nebyl problém. Vytvořil bych subvolume a nastavil kvóty. Jenže tenhle server měl pouze jeden diskový oddíl formátovaný na ext4, takže jsem nemohl využívat ani výhod snapshotování. Šel jsem na to tedy jinak.
Rozhodl jsem se rovnou oběhovat část kapacity virtuálního disku tím, že jsem na něm vytvořil soubor o velikosti 16GB, který jsem následně připojil přes looback a zformátoval na Btrfs. A takhle už to běží asi 6 let. Záznam v souboru /etc/fstab
vypadá takto:
~# cat /etc/fstab UUID=01ec1b7f-5a05-42a4-8032-130693a4c959 / ext4 errors=remount-ro 0 1 /home/user/dav.img /home/user/dav btrfs loop,subvol=webdav 0 0 …
Mezi tím se ukázalo se, že zvolená kapacita sdíleného úložiště je zbytečně velká. Zato původní web se poněkud rozrostl. Proto jsem se odhodlal k tomu, abych onen virtuální disk zredukoval na polovinu. Ovšem nejdřív bylo nutné uvolnit zabrané místo. O tom, jak vypadala výchozí situace se můžete přesvědčit zde:
~# mount … /dev/vda1 on / type ext4 (rw,relatime,errors=remount-ro) … /home/user/dav.img on /home/user/dav type btrfs (rw,relatime,space_cache,subvolid=257,subvol=/webdav) … ~# df -h Souborový systém Velikost Užito Volno Uži% Připojeno do … /dev/vda1 39G 32G 5,3G 86% / … /dev/loop0 15G 2,9G 9,7G 23% /home/user/dav …Teď asi možná někdo kroutí hlavou co na tom řeším, když z 15G je obsazeno pouhých 23% tedy 2,9G. Jenže když se podíváte pořádně na následující výpis, tak si můžete všimnout, že je ve skutečnosti zabráno 7G a ne jenom 2,9.
~# btrfs fi show /home/user/dav Label: 'DAV' uuid: 181c497e-28c0-4547-b1e6-ca13f355a2de Total devices 1 FS bytes used 2.81GiB devid 1 size 15.00GiB used 9.58GiB path /dev/loop0 ~# btrfs fi df /home/user/dav Data, single: total=7.01GiB, used=2.81GiB System, DUP: total=32.00MiB, used=16.00KiB System, single: total=4.00MiB, used=0.00B Metadata, DUP: total=1.25GiB, used=7.61MiB Metadata, single: total=8.00MiB, used=0.00B GlobalReserve, single: total=16.00MiB, used=0.00BFajn. Btrfs na to ale má řešení.
~# btrfs balance start /home/user/dav WARNING: Full balance without filters requested. This operation is very intense and takes potentially very long. It is recommended to use the balance filters to narrow down the scope of balance. Use 'btrfs balance start --full-balance' option to skip this warning. The operation will start in 10 seconds. Use Ctrl-C to stop it. 10 9 8 7 6 5 4 3 2 1 Starting balance without any filters. Done, had to relocate 13 out of 13 chunks
~# btrfs fi df /home/user/dav Data, single: total=3.00GiB, used=2.80GiB System, DUP: total=32.00MiB, used=16.00KiB Metadata, DUP: total=256.00MiB, used=7.20MiB GlobalReserve, single: total=16.00MiB, used=0.00B ~# btrfs fi resize -8g /home/user/dav Resize '/home/user/dav' of '-8g' ~# df -h Souborový systém Velikost Užito Volno Uži% Připojeno do … /dev/vda1 39G 32G 5,3G 86% / … /dev/loop0 7,0G 2,9G 3,7G 44% /home/user/dav … /home/user/dav.img
Rebalancování onoho virtuálního disku zabralo cca minutu, protože jsem měl zabráno fakt prd. Kdybych měl dat více a měl k dispozici více RAM, tak by se to dalo urychlit s využitím ramdisku. Takto:
Jak jste se mohli sami přesvědčit, objem zabraných dat na loop zařízení klesl na pouhé 3G, takže jsem s klidem mohl udělat shrink o celých 8G a velikost souborového systému na loop zařízení se zmenšila na 7G. Jenže…
~# ls -alh /home/user/dav.img -rw-r--r-- 1 root root 15G pro 22 16:48 /home/user/dav.img
Jak vidíte, velikost virtuálního disku zůstala beze změny. Takže bylo nutné udělat ještě jednu operaci – “smrsknout“ virtuální disk.
K tomu ovšem bylo nutné na chvíli odstavi apache, aby na něj nehrabal, a ještě před odmoutováním zjistit kolik místa zabírá ten souborový systém v K. Terve pak bylo možné použít truncate
, virtuální disk opět namountovat a opět nahodit apache:
~# systemctl stop apache2 && sync ~# df Souborový systém 1K bloků Užito Volné Uži% Připojeno do … /dev/loop0 7340032 2972932 3807420 44% /home/user/dav … ~# umount /home/user/dav && sync ~# truncate -s 7340032K /home/user/dav.img ~# ls -al /home/user/dav.img -rw-r--r-- 1 root root 7,0G pro 22 18:56 /home/user/dav.img ~# mount /home/user/dav ~# systemctl start apache2
Tiskni
Sdílej:
Ono je garantované že to BTRFS ballance presunie všetky dáta na začiatok disku?No, proto je tam ten resize.
btrfs fi resize -8g /home/user/dav
Tak ten som si nevšimol, priznám sa.Já napoprvé také ne a vrtalo mi to hlavou. A zjistil jsem, že
btrfs check
je úplně jedno, že se mu zmenšil blockdevice. lvcreate -L 64G -n btrfs VGData btrfs fi show ... devid 1 size 64.00GiB used 20.00MiB path /dev/mapper/VGData-btrfsZmenšíme to:
lvreduce -L 16G /dev/VGData/btrfs btrfs fi show ... devid 1 size 64.00GiB used 20.00MiB path /dev/mapper/VGData-btrfsA check ani nepípne:
btrfs check /dev/VGData/btrfs Opening filesystem to check... Checking filesystem on /dev/VGData/btrfs UUID: a1f63e1d-33d0-4759-bb81-987c2b37f099 [1/7] checking root items [2/7] checking extents [3/7] checking free space cache [4/7] checking fs roots [5/7] checking only csums items (without verifying data) [6/7] checking root refs [7/7] checking quota groups skipped (not enabled on this FS) found 655360 bytes used, no error found total csum bytes: 0 total tree bytes: 131072 total fs tree bytes: 32768 total extent tree bytes: 16384 btree space waste bytes: 124530 file data blocks allocated: 524288 referenced 524288Oni asi věděli, proč ho nepsali. Ještě by někdo chtěl, aby fungoval.
Pozrel som si to ako nápad, vytvoril sparse loopback, nahodil BTRFS, plnil mu FS náhodnými dátami (z ktorých som trochu odmazával aby nastávala fragmentácia) a potom som jednoducho pustil FSTRIM.Jo, toto funguje, pokud se výchozí "blockdevice" vytvoří jako sparse. Což asi ne každý dělá nebo chce. Umějí to i widle na iscsi, svého času jsem takto měl ntfs disky ve widlích přes iscsi, protože se mi nechtělo mít v herním kompu rotační disky a ssd byly malý.
toto funguje, pokud se výchozí "blockdevice" vytvoří jako sparse.Čudné na tom je to, že som si nevytvoril sparse file, a fungovalo mi to.
# dd if=/dev/zero of=bigfile bs=1M count=16384 # du bigfile 16777216 bigfile # losetup --find --show bigfile /dev/loop0Zajímavé je, že BTRFS detekuje SSD. A teď proč? Buď mu schopnost discard posílá přímo LOOP, nebo LOOP ví, že je na SSD a tuto vlastnost propouští. Bohužel nemám k disposici HDD, na kterém bych to teď rychle vyzkoušel:
# mkfs.btrfs /dev/loop0 btrfs-progs v5.9 See http://btrfs.wiki.kernel.org for more information. Detected a SSD, turning off metadata duplication. Mkfs with -m dup if you want to force metadata duplication. Label: (null) UUID: ecb9cfc8-1269-45d8-ba11-4f745233f3ed Node size: 16384 Sector size: 4096 Filesystem size: 16.00GiB Block group profiles: Data: single 8.00MiB Metadata: single 8.00MiB System: single 4.00MiB SSD detected: yes Incompat features: extref, skinny-metadata Runtime features: Checksum: crc32c Number of devices: 1 Devices: ID SIZE PATH 1 16.00GiB /dev/loop0 # mount /dev/loop0 /mnt/btrfsProtrimujem to:
# fstrim /mnt/btrfs
# ls -l total 262960 -rw-r--r-- 1 root root 17179869184 Dec 23 18:38 bigfile # du * 262960 bigfileJo, takže to prostřílel, i když to na začátku nebyl sparse file. Jestli budu mít čas a vzpomenu si na to, tak to ještě zkusím na HDD. Podkladový FS XFS. Debian Testing, 5.9.0-4-amd64
Súbor umožňuje vystreliť prázdne miesto (punch hole) o ktoré sa zmenší obsadená veľkosť daného súboru.To je jasné, ale to ještě neznamená, že loop musí tuto vlastnost automaticky použít. Tj aktivně tomu FS reportovat, že blockdevice loop0 umí discard. To není automatická vlastnost všech blockdevice a před pár lety to byla spíše výjímka. A ano, do souboru se umí dělat díry, ale ne každý admin to automaticky chce. Nenašel jsem možnost ten loop nějak nastavit (krom size, offest, apod), třeba to nějak jde.
Nerozumiem prečo by mal túto vlastnosť povoľovať alebo zakazovať podľa toho či je ten disk na SSH alebo HDD.To byla jen úvaha, že by tuto vlastnost dědil z FS na kterém je ten zdrojový soubor. Tj aby FS v loopu měl stejné podmínky, jako FS na kterém leží zdrojový soubor.
Preto že tvoja úvaha že by sa mal loopback chovať pri príkaze TRIM podľa toho či je na SSD alebo HDD je scestná.Ne, není. Blockdevice běžně dědí (nebo může) vlastnosti z nadraženého blockdevice nebo poskytují další data (třeba velikosti a rozložení stripu). Tj tato moje myšlenka vedla právě k tomu dědění. Nic víc! O žádném wear levelingu apod jsem nikdy nemluvil! Aneb jak jedna malá věta dokáže někoho vést na zcestí. Jinak, pokud tuhle zbytečnost teda ukončíme a vrátíme se k věci, tak ono je to teda ještě horší, než jsem si myslel: Pokud chce vyšší vrstva (tedy FS v loop device) DISCARD, dostane automaticky PUNCH_HOLE (bez možnosti konfigurace):
case REQ_OP_DISCARD: return lo_fallocate(lo, rq, pos, FALLOC_FL_PUNCH_HOLE);Jenže, pokud to chce jen vynulovat, tak dostane by default taky PUNCH_HOLE, pokud si neřekne jinak (a zatím jsem nenašel možnost to nastavit).
case REQ_OP_WRITE_ZEROES: /* * If the caller doesn't want deallocation, call zeroout to * write zeroes the range. Otherwise, punch them out. */ return lo_fallocate(lo, rq, pos, (rq->cmd_flags & REQ_NOUNMAP) ? FALLOC_FL_ZERO_RANGE : FALLOC_FL_PUNCH_HOLE);A to je to, o čem jsem mluvil, že to automaticky dělá díry do souborů i když admin nechce. Tj do toho FS to reportuje vlastnost discard (tj fs to detekuje jako SSD, viz výpis
mkfs.btrfs
), a na základě toho, že mu tam FS posílá discard, dělá díry do souboru (což nejde vypnout; tj že by admin třeba nastavit to vynulování - discard vždy dělá díry). U toho zeroout by to nějak snad mohlo jít vypnout, ty vynutit si zákaz disard v tom fs v loopu a potom ten loop nějak přesvědčít, aby nedělal díry, ale zkutečně tam zapsal ty nuly.
nechápemAno a po x té už to prostě psát nebudu. Upnul ses na nesmysl, který jsem nikdy nenapsal.
ako stále tvrdíšKde to stále tvrdím? Nikde jsem to netvrdil, 5x jsem to vyvrátil. Tohle je nějaká vánoční společenská hra? Tak ještě tak dvě kola, ok? Potom jdu dělat něco užitečnějšího
Aha, tak že by loop uměl prostřílet díry i v normálním souboru? Jako jde to, ale (asi) by měl respektovat původní nastavení.Takže naozaj by mal loop device pri TRIM rešpektovať či je na SSD (a vystrieľať diery) alebo či je na HDD (a nič nerobiť) aj keď hole punching nemá nič s podkladovou vrstvou SSD/HDD? Nuž to znie veľmi zaujímavo, a rád by som vedel ako by sa mal loop device zachovať napríklad na stále bežných hybridných diskoch, DVD RAM vynecháme ako módny výstrelok ktorý sa neuchytil. Kľudne pokračuj, rád sa dozviem niečo o strategickom plánovaní funkcionality ovládačov blokovej vrstvy.
Ono sa to točí okolo tvojho rešpektovania pôvodného nastaveniaKde není o SSD ani slovo. Je to reakce na tvůj komentář:Aha, tak že by loop uměl prostřílet díry i v normálním souboru? Jako jde to, ale (asi) by měl respektovat původní nastavení.
Čudné na tom je to, že som si nevytvoril sparse file, a fungovalo mi to.A i komentář před tím se točí okolo sparse vs normální soubor. Tj o SSD (z mé strany) nepadlo ani slovo a diskuse se vedla kolem toho, zda loop respektuje klasický soubor. Další (moje) bádání přineslo informaci, že nerespektuje a naopak preferuje vytváření sparse file pomocí punch hole. Ani slovo o SSD.
Jo, takže to prostřílel, i když to na začátku nebyl sparse file.
A to je to, o čem jsem mluvil, že to automaticky dělá díry do souborů i když admin nechce.Akorát je otázka, jestli admin skutečně nechce, tj. jestli v reálném (nikoliv teoretickém) nasazení existuje důvod, proč ty díry nechtít dělat. Vzhledem k tomu, že za ty roky nikomu nestálo za to věnovat čas tomu, aby to šlo (např. bylo přepínatelné pomocí nějakého flagu při vytvoření toho loop device), tak to asi není tak kritické.
důvod, proč ty díry nechtít dělatTak důvodů může být víc. Sparse soubor je ze své přirozenosti mnohem fragmentovanější a tedy mnohem pomalejší (na sekvenční zápis / čtení). Tohle je třeba i vlastnost ZFS ZVOL, kdy se vždy vytváří jako sparse a nelze jej předalokovat, ale výkon teda odpovídá tomuto typu. Tj sekvenční rychlost zvolu je o dost nižší, než při použití skutečného souvislého blokového zařízení (tj třeba LV). Dneska na SSD / NVMe je už to skoro jedno, ale na HDD je rozdíl velký (200MB/s vs 60MB/s a to ještě na poměrně mladém čistém zfs). Proto třeba pro disky VM preferuju LVM, čisté lineární blokové zařízení s plnou rychlostí disku. Potom management místa na disku. Pokud nahraju a připojím (rw) 500GB souboru s image nějakého FS a přes noc se stane naplánovaný
fstrim -a
a smrskne se to na 30GB, tak náhle mám víc volného místa na disku (než bych "měl" mít). Což může být problém při zaplnění disku a následného zápisu do toho připojeného FS. Tedy je to starost navíc. (zfs ve výchozím stavu rezervuje místo na disku pro zvol, lze to vypnout - tj pokud bych ten 500GB image nahrál do zvolu, tak sice bude zabírat jen 30GB, ale těch 500GB bude stále rezerováno - tohle na klasickém FS, kde je loop soubor prostě jen soubor, by default nemám, musel bych dělat quoty apod.)
Další věc, která ale přímo nesouvisí s vytvářením děr do toho souboru je to, že loop se (automaticky? - /sys/block/DEV/queue/rotational
) tváří jako ssd, resp FS jej tak interpretují (tj podporuje discard). To může u některých FS změnit způsob chování k tomu zařízení (viz třeba option ssd / nossd v mountu btrfs). Dopad na výkon toho FS by se musel změřit.
Vzhledem k tomu, že za ty roky nikomu nestálo za to věnovat čas tomuTak ona je spíš otázka, jestli se někde reálně masivně nasazuje loop pro zápis v produkčním prostředí. Loop se používá pro mount různých squashfs nebalíčků (snap), ale tj ro.
Jo, to bude jedno souviset s druhým. Když pominu různé "potřebuju se podívat do ISO souboru", nenapadá mě žádný dobrý důvod, proč v produkci používat loop místo jiného (s největší pravděpodobností rozumnějšího a čistšího) řešení.Vzhledem k tomu, že za ty roky nikomu nestálo za to věnovat čas tomuTak ona je spíš otázka, jestli se někde reálně masivně nasazuje loop pro zápis v produkčním prostředí.
Proto má každý slušný souborový systém možnost TRIM používat nebo nepoužívat (předpokládám, že BTRFS taky).Nějak všichni ignorujete tu druhou větev. Tedy to, že zeroout udělá punch hole. Tj je tu několik nezávislých věcí. Loop device se chová jako nonrotational device. FS uvnitř loopu to tedy detekuje jako ssd. Což má vliv na jeho optimalizaci vůči ne/rotačním diskům. Tohle se dá vypnout pomocí volby mountu. Potom je tady druhý problém. Zařízení loop umí funkci discard (discard není jen vlastností ssd, i dřívější disková pole měla příkaz unmap). Tj fs v tom loopu může posílat příkaz discard do toho loop zařízení. Kde se tohle vždy interpretuje jako punch hole. Ok, v pořádku a píšu to asi po desáté, že by to mohlo být konfigurovatelné. Jenže potom je tu další problém, že i když fs nepošle discard, ale jen pošle příkaz pro vynulování oblasti (REQ_OP_WRITE_ZEROES), tak loop device by default stejně provede punch hole.
Můžeš zkusit někoho přemluvit k tomu, aby do loop dopsal volitelnou podporu pro předávání TRIM.Ale proč bych to měl JÁ dělat? Proč mi tady už dva lidi podsouvají něco, co jsem nikdy neřekl, nechtěl, nemyslel, nenapsal a asi 20x se proti tomu ohradil? Nikde nehovořím nic o tom, že by se mělo něco z loop device předávat na ssd. Nikde. Celá nešťastná diskuse začala tím, zda by měl loop device zachovávat obyčejný soubor, pokud tedy není vytvořen jako sparse. Pohled do zdrojáků jasně ukazuje, že si tam vesele dělá díry a že je preferuje i před nulami. Hotovo, případ vyřešen.
Nikde nehovořím nic o tom, že by se mělo něco z loop device předávat na ssd.A když jsme u toho, zrovna tohle by se u toho trim dít mělo (a pokud dobře chápu, tak i děje.) Pokud něco udělá trim nad tím loop device, měl by ten trim dolézt až na to SSD (thin-lv, ceph, ...)
Pohled do zdrojáků jasně ukazuje, že si tam vesele dělá díry a že je preferuje i před nulami. Hotovo, případ vyřešen.Když tak nad tím přemejšlím, napadá mě, že to bylo zvoleno jako efektivnější způsob (oproti zápisu těch nul), jak tam ty nuly dostat. Zbytek - že se nedetekuje, jestli ten původní soubor byl sparse, a že se to nedá konfigurovat - je podle mě ŽaVeS
A když jsme u toho, zrovna tohle by se u toho trim dít mělo (a pokud dobře chápu, tak i děje.) Pokud něco udělá trim nad tím loop device, měl by ten trim dolézt až na to SSD (thin-lv, ceph, ...)Jasně, já taky neříkám, že se to dít nesmí/musí, jen jsem se k tomu vůbec nevyjadřoval, protože toto je věcí toho podkladového FS, na kterém leží onen soubor nad kterým je loop. Ten si s tím poradí po svém a bude mít pro puch hole vlastní optimalizace.
Když tak nad tím přemejšlím, napadá mě, že to bylo zvoleno jako efektivnější způsob (oproti zápisu těch nul), jak tam ty nuly dostat.OT: když jsem si s tím teď hrál v rámci této diskuse, tak jsem testoval na zfs vynulování ZVOL, což způsobilo snížení zabrané velikosti až na výchozích 128kB. Potom jsem si všiml, že tam je zděděná komprese. Při vypnutí komprese to poctivě uchovává i ty nuly. Výchozí komprese je lz4, ale nabízí i speciální zle (The zle compression algorithm compresses runs of zeros.) Tj zfs s nulama nic nedělá a nechá to až na volitelné kompresní metodě. Tj způsobů, jak se toho zbavit a za každou cenu ušetřit místo na disku, je hodně
Pohled do zdrojáků jasně ukazuje, že si tam vesele dělá díry a že je preferuje i před nulami. Hotovo, případ vyřešen.To vyzerá zaujímavo, ale má to jeden drobný háčik:
golisp@HP-ProBook-6460b:~$ fallocate --length 8G /tmp/loopback golisp@HP-ProBook-6460b:~$ du -sh /tmp/loopback 8.1G /tmp/loopback golisp@HP-ProBook-6460b:~$ losetup -f /dev/loop13 golisp@HP-ProBook-6460b:~$ sudo losetup /dev/loop13 /tmp/loopback [sudo] password for golisp: golisp@HP-ProBook-6460b:~$ sudo dd if=/dev/zero of=/dev/loop13 bs=10M status=progress 8535408640 bytes (8.5 GB, 7.9 GiB) copied, 176 s, 48.5 MB/s dd: error writing '/dev/loop13': No space left on device 820+0 records in 819+0 records out 8589934592 bytes (8.6 GB, 8.0 GiB) copied, 180.96 s, 47.5 MB/s golisp@HP-ProBook-6460b:~$ sync golisp@HP-ProBook-6460b:~$ du -sh /tmp/loopback 8.1G /tmp/loopback golisp@HP-ProBook-6460b:~$ sudo blkdiscard -v /dev/loop13 /dev/loop13: Discarded 8589934592 bytes from the offset 0 golisp@HP-ProBook-6460b:~$ du -sh /tmp/loopback 20K /tmp/loopback golisp@HP-ProBook-6460b:~$ sync golisp@HP-ProBook-6460b:~$ du -sh /tmp/loopback 8.1G /tmp/loopback golisp@HP-ProBook-6460b:~$Takto sa mi to chová pri jadre 5.8 na rotačnom HDD, a rovnaké chovanie som mal aj na SSD. Pri prepise nulami sa nevystrieľali diery a podkladový súbor ostal v pôvodnej veľkosti. Tie diery vystrieľal až TRIM (pre zjednodušenie pomocou blkdiscard). Keď som dal takýto deravý súbor prepísať nulami cez loopback device , tak sa natiahol na pôvodnú veľkosť.
TRIM pri loopback device nerobí discard pri prepise nulami. sudo dd if=/dev/zero of=/dev/loop13 bs=10M status=progressMožná by bylo načase, abyste se tu přestal ztrapňovat předváděním nejenom své neschopností pochopit psaný text, ale také svými neznalostmi.
A taky bych doporučoval se podívat, jak vypadá obsah souboru vytvořeného přes truncate. Ne. Nuly v něm opravdu nejsou.Já bych doporučoval, abyste si to zkusil sám, co by tam mělo být jiného než nuly?
$ truncate -s 128 trupokus.txt $ hexdump <trupokus.txt 0000000 0000 0000 0000 0000 0000 0000 0000 0000 * 0000080
~$ ls -al soubor -rw-r--r-- 1 root root 5 pro 29 10:07 soubor ~$ cat soubor 00000~$ hexdump soubor 0000000 3030 3030 0030 0000005Nuly, které vrací hexdump jsou pouze binální interpretací volného místa. Stačí místo hexdump použít od
~# truncate -s 10 soubor ~$ cat soubor 00000~$ hexdump soubor 0000000 3030 3030 0030 0000 0000 000000a ~# cat soubor | od -a 0000000 0 0 0 0 0 nul nul nul nul nul 0000012
/dev/zero
, tak jste s 0x30 "nulou" úplně mimo téma. Rodíl mezi nulou zapsanou na disku a nulou z volného místa je pak pro praktické aplikace, které s tím souborem pracují, veškerý žádný.
Když vytvoříš prázdný soubor o velikosti X, tak obvykle NECHCEŠ, aby se ti sám od sebe automaticky smrsknul.Ale chceš, aj keď o tom nevieš. Funkcionalita Hole Punching je už dávno hlboko zakorenená v systéme a userspace. A to nielen pri loopbacku, ale aj napriamo do súboru keďže mkfs.ext4 tie diery vystrieľal do súboru aj bez toho obávaného loopbacku. Obavy by som pochopil na 10 ročných diskoch s mizerným IOPS kde mu dá fragmentácia poriadne zabrať. Alebo na prostrediach kde sa človek spolieha že odloží voľačo čo nechce sledovať, ale v tom prípade je to voľačo bezcenné keďže to nestojí za kontrolu. PS: Použil som fallocate, nie truncate. To fallocate mi reálne alokovalo miesto, truncate mi alokovalo prd:
$ fallocate -l 8G /tmp/falloc; du -sh /tmp/falloc 8.1G /tmp/falloc $ truncate -s 8G /tmp/trunc; du -sh /tmp/trunc 0 /tmp/trunc
Oni asi věděli, proč ho nepsali. Ještě by někdo chtěl, aby fungoval.Na 4.9 takový FS šel i bez problému namountovat a dokonce i číst. Jen v okamžiku, kdy si driver sáhnul za konec zařízení, nastal kernel oops. Teď jsem to vyzkoušel na 5.8, namountovat jde, číst jde, a sáhnutí za konec zařízení už se handluje bezpečně. Jen je mrzuté, že ti to neřekne, a přijde se na to až při pokusu o čtení souboru který vyšel za konec, nebo při scrubu. Takže když uděláš chybu, tak na ni můžeš přijít až příliš pozdě (např. v okamžiku, kdy už jsi uvolněné místo něčím přepsal). Konkurenční filesystémy se nenamountují a řeknou ti proč (EXT4-fs (loop1): bad geometry: block count 256000 exceeds size of device (204800 blocks)).
kolik prapodivností dokážeš zkombinovat na produkčním serveru ... pro zvětšní místa na VM není potřeba ani odstávky, že za běhu přidá další disk a vloží jej do LVM VG a jen zvětší příslušné LV.V jednom příspěvku
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.