Byla vydána betaverze Fedora Linuxu 42, tj. poslední zastávka před vydáním finální verze, která je naplánována na úterý 15. dubna. Z novinek (ChangeSet) lze vypíchnout edici KDE Plasma Desktop nebo spin Cosmic. Vydán byl také Fedora Asahi Remix 42 Beta pro Apple Silicon.
Byla vydána verze 12.00 linuxové distribuce SystemRescue, původně SystemRescueCd, určené pro záchranu systémů a dat. Přehled novinek v changelogu. Přidána byla podpora bcachefs, Linux byl povýšen na verzi 6.12.19, GParted na verzi 1.7.0, nwipe na verzi 0.38, dump na verzi 0.4b49, …
Google kupuje společnost Wiz za 32 miliard dolarů.
Byly zpracovány a na YouTube zveřejněny videozáznamy jednotlivých přednášek z letošního Installfestu.
Společnost Bambu Lab spustila na Kickstarteru kampaň CyberBrick: Beyond Bricks. Jedná se o modulární systém programovatelných a dálkově ovládaných hraček. Objednat si lze jenom moduly s čipy a hračky si vytisknout na 3D tiskárně.
Mikrokontroléry RP2350A a RP2350B jsou již volně v prodeji. Představeny byly v srpnu loňského roku společně s Raspberry Pi Pico 2.
GIMP 3.0 byl oficiálně vydán (Mastodon, 𝕏). Přehled novinek v poznámkách k vydání.
Od 6. do 19. dubna proběhne volba vedoucího projektu Debian (DPL, Wikipedie) na další funkční období. Kandidují Gianfranco Costamagna, Julian Andres Klode, Andreas Tille a Sruthi Chandran.
Korespondenční seminář z programování (KSP) pražského Matfyzu pořádá i letos jarní soustředění pro začátečníky. Zváni jsou všichni středoškoláci a starší základoškoláci, kteří se chtějí naučit programovat, lépe uvažovat o informatických úlohách a poznat nové podobně smýšlející kamarády. Úplným začátečníkům bude určen kurz základů programování a kurz základních algoritmických dovedností, pokročilejším nabídneme různorodé
… více »Joe Brockmeier z Linux Weekly News vyzkoušel různé forky webového prohlížeče Mozilla Firefox: především GNU IceCat, Floorp, LibreWolf a Zen. V článku shrnuje, v čem se liší od výchozí konfigurace Firefoxu, co mají za vlastní funkcionalitu, jak a kým jsou udržované atd.
mozno findom a roznymi atime ctime mtime najst to co potrebujes a to syncnut..ale to je len cisty vystrel do tmy.
ale tu by sa mozno uz oplatilo postavit tu webfarmu nad sharovanym storidzom
D.
$ inotifywait -m -e close_write -e delete . Setting up watches. Watches established. ./ CLOSE_WRITE,CLOSE cc ./ CLOSE_WRITE,CLOSE cc ./ DELETE ccZ toho pak to vyextrahovat a zkopirovat. Pokud hrozi vytavareni adreasaru, tak to lze, ale asi to chces nejaky skript nad inotify.
find source_dir -type d -exec mkdir -p '{}' /dest_dir/'{}' \; find source_dir -type f -cmin -1440 -exec cp -v '{}' /dest_dir/'{}' \;Samozrejmne si budes muset pohrat s cestou k source a dest adresari, aby se vse kopirovalo do spravnych adresaru, ale na 99,9% nic rychlejsiho nenajdes(pro spoustu malych souboru).
find
je samozřejmě z principu řádově pomalejší, navíc když ho tak neoptimálně pouštíte (10 000 000 procesů cp
mluví za vše). Ale chápu, že to děláte s ohledem na stav vašeho OS (D1), který má zjevně nějaký výkonnostní problém a nedokáže vyhovět požadavkům rsync
při práci s IO.
Pokud by se ovšem podařilo najít ten výkonnostní problém, tedy opravit D1, budete samozřejmě rychlejší s rsync
, který během kopírování žádnou jalovou práci nedělá a nezaměstnává procesor zbytečnostmi, které ovšem na rozbitém systému umožní jakž takž kopírovat. Ten výkonnostní problém jsem také dlouho míval, ale s novým jádrem a aktualizacemi díky bohu nějak vymizel, byl to opravdu osten v p...
bash$ time $(find source_dir -type d -exec mkdir -p '{}' dest_dir/'{}' \; ; find source_dir -type f -cmin -1440 -exec cp '{}' dest_dir/'{}' \;) real 8m11.393s user 0m4.963s sys 2m21.717s bash$ time rsync -a source_dir dest_dir/ real 0m11.774s user 0m1.600s sys 0m11.933sJe docela zoufalé, že na rozbitém systému se musí při kopírování většího množství dat vkládat různé cykly typu "find" a "verbose", ale je jasné že dokud systém nebude opraven, je to způsob, jak to alespoň jakž takž pomalu ale jistě překopírovat, aniž by se to cestou rozbilo. Jinak samozřejmě optimální by bylo odstranit problém a použít rsync.
find ... -exec cp
dělá to, že pro každý nalezený soubor, spustí extra proces cp
. Nemusí jich být 10M, ale bude prostě pro každý soubor jeden, a vytváření procesů je v linuxu prostě drahé a v tomto případě hlavně zbytečné. Chápte? Každý jeden modifikovaný soubor vezmete, vytvoříte pro něj proces cp, který ho zkopíruje, a zase zanikne. Neskutečné plýtvání. Pokud vám 2,5h stačí a zátěž stroje a účty za elektriku vás netrápí, budiž, ale musí to jít i efektivněji, pomocí rsync (ok, tam říkáte že je probl.), nebo tar, nebo lépe použít cp (ten také umí kopírovat víc než jeden soubor na jedno spuštění.
vytváření procesů je v linuxu prostě drahé
Od kdy?
find / cp
a co dělá rsync
. Víte jistě, jak rsync
interně pracuje. Pokud rsync
sáhne na všech 7M souborů i když by nemusel, tak je to čas asi 10 hodin v seek time (tak špatně to asi nebude). Pokud na těch 300 000 sáhne o jednou více než cp
(třeba proto, že tam může být nějaký sync pro cache, aby měl skutečně data, co jsou na disku) tak je to cca 50 minut jen na ten seek. V podstatě na žádném rotačním disku se nedá dostat moc výš než 100-150 IOPS. To jsou základní operace, tedy i čtení inode.
Možná že by se tazateli dalo najít úzké místo pomocí atop
, iotop
nebo pomocí technik Extreme Linux Performance Monitoring
Vytvoreni 1 milionu procesu, ktere hned skonci, v ramci jednoducheho c programu mi trvalo na X5650 @ 2.67GHz cca 45vterin tj. 45 microsekund na proces. Tj. rezie jen samotneho zalozeni/ukonceni 10mil. procesu je neco jako 8min.
To, co presne dela rsync se soubory jsem popsal nize, jde to videt v strace. Dela tech operaci vice, ale taky dava daleko vice zaruk nez jednoduchy cp. Zadne sync() rsync nevola. Find zase pochopitelne na kazdy soubor musi zavolat stat() [realne vola newfstatat()].
Jinak se to tady uz objevilo vicekrat, reaguji zde - inody na disku nejsou rozesety nahodne, ale jsou vzdy zdruzovane po skupinach, ktere nejsou zrovna male. Muj ext4 rika "8192" Inodes per group. Takze ty vypocety ohledne seeku je nutne brat s rezervou, zvlast kdyz se jedna o cteni pristupy, kde prvni cteni pravdepodobne natahne do pameti vsechny inody z dane skupiny.
Tak jsem si s tim inotify trochu pohral. Primarne mi slo o to, zda inotify lze/nelze pouzit pro miliony souboru. Vzal jsem zdrojak "inotify-tools", konkretne inotifywatch. Upravil jsem ho, aby pri volbe "-r" navesil sondy i na soubory a aby nevolal zbytecne stat() na kazdy soubor, coz predtim delal.
Pri cold cachi trvala inicializace na 1002524 souborech 55 vterin na SSD disku s ext4 a i5 procesoru. S hot cachi trvala inicializace 7.5 vteriny. Spotreba pameti pak byla na urovni ~280MiB.
Spotreba pameti by se dala navic hodne snizit vhodnym ukladanim jmen souboru - tato verze uklada cele jmeno bez vyuziti komprese stejnych prefixu apod.
Takze bych system inotify uplne nezatracoval, ale je potreba jej pouzivat "spravne". Vsechny inotify sw, ktery umi rekurzivne poslouchat, ktere jsem videl, maji z pohledu vykonu co dohanet.
cat /proc/sys/fs/inotify/max_user_watches
--size-only
bude to porovnavat podle velikosti, což by mohlo být rychlejší. Samozřejmě změna souboru se nemusí projevit na jeho velikosti a tim pádem můžeš prošvihnout nejaké aktualizace.
fam
(File Alteration Monitor). Nikdy jsem jej ale nepouzival, takze mozna je to uplne mimo misu :)
#!/bin/sh DATE=`date +%Y%m%d` TOUCH_OLD=/home/backuper/bin/touch.old TOUCH_NEW=/home/backuper/bin/touch.new FILELIST_FILE=/tmp/filelist-${DATE}.txt SRC_PATH=/var/nfs/ # 1. vytvorime novy docasny touch touch $TOUCH_NEW # 2. vytvorime zoznam suborov od predosleho touch find $SRC_PATH -newer $TOUCH_OLD ! -type d > $FILELIST_FILE # 3. vytvorime archiv podla zoznamu /bin/tar -czf - --files-from=$FILELIST_FILE --transform 's|^var/nfs/||' # 4. posunieme novy touch na stary mv $TOUCH_NEW $TOUCH_OLDTo vytvorí na pôvodnom serveri zoznam nových súborov a zbalí ho. Výstupný archív ide na STDOUT. To preto, že to potom volám z toho druhého servera:
secondary-server ~ # ssh backuper@primary-server ~/bin/tar-new-files.sh | tar -xz -C /var/zalohaTo vezme zmenené súbory od poslednej synchronizácie, zbalí ich, prenesie cez SSH a rozbalí ich potom na druhom serveri. Počiatočný stav je potrebné samozrejme vytvoriť pomocou plného rsyncu, alebo podobne. Taktiež to nerieši situáciu, keď sa súbory na pôvodnom serveri neskôr vymažú (sekundárny sa to nedozvie a ostanú tam).
--dry-run
)? 10M souborů mi nepřipadá tak moc.
--dry-run
? Jinak by se zrychlení díky přemountování s noatime projevilo až po úspěšné synchronizaci atimes na druhý stroj :)
-W, --whole-file With this option rsync’s delta-transfer algorithm is not used and the whole file is sent as-is instead. The transfer may be faster if this option is used when the bandwidth between the source and destination machines is higher than the bandwidth to disk (especially when the "disk" is actually a networked filesystem). This is the default when both the source and des‐ tination are specified as local paths, but only if no batch-writing option is in effect.
3090 1350825670.190272 lstat("linux-3.4.9-gentoo.10/arch/arm/mach-omap2/board-zoom-debugboard.c", 0x7fff95b06940) = -1 ENOENT (No such file or directory) <0.001303> 3091 1350825691.894455 select(5, NULL, [4], [4], {30, 0}) = 1 (out [4], left {29, 999997}) <0.000012> 3091 1350825691.894515 write(4, ""..., 8) = 8 <0.000019> 3091 1350825691.894582 open("linux-3.4.9-gentoo.10/arch/arm/mach-omap2/board-zoom-debugboard.c", O_RDONLY) = -1 ENOENT (No such file or directory) <0.000547> 3091 1350825691.895178 open("linux-3.4.9-gentoo.10/arch/arm/mach-omap2/.board-zoom-debugboard.c.BVJsNA", O_RDWR|O_CREAT|O_EXCL, 0600) = 1 <0.002558> 3091 1350825691.897779 fchmod(1, 0600) = 0 <0.002224> 3091 1350825691.900058 write(1, ""..., 3350) = 3350 <0.003614> 3091 1350825691.903712 close(1) = 0 <0.000015> 3091 1350825691.903759 lstat("linux-3.4.9-gentoo.10/arch/arm/mach-omap2/.board-zoom-debugboard.c.BVJsNA", {st_mode=S_IFREG|0600, st_size=3350, ...}) = 0 <0.000025> 3091 1350825691.903837 utimes("linux-3.4.9-gentoo.10/arch/arm/mach-omap2/.board-zoom-debugboard.c.BVJsNA", {{1350825691, 0}, {1350820690, 0}}) = 0 <0.000461> 3091 1350825691.904343 chmod("linux-3.4.9-gentoo.10/arch/arm/mach-omap2/.board-zoom-debugboard.c.BVJsNA", 0644) = 0 <0.004003> 3091 1350825691.908391 rename("linux-3.4.9-gentoo.10/arch/arm/mach-omap2/.board-zoom-debugboard.c.BVJsNA", "linux-3.4.9-gentoo.10/arch/arm/mach-omap2/board-zoom-debugboard.c") = 0 <0.003544>Na strane klienta pak:
32459 1350825662.709026 lstat("linux-3.4.9-gentoo.10/arch/arm/mach-omap2/board-zoom-debugboard.c", {st_mode=S_IFREG|0644, st_size=3350, ...}) = 0 <0.000008> .... 32459 1350825681.527884 open("linux-3.4.9-gentoo.10/arch/arm/mach-omap2/board-zoom-debugboard.c", O_RDONLY) = 3 <0.000007> 32459 1350825681.527911 fstat(3, {st_mode=S_IFREG|0644, st_size=3350, ...}) = 0 <0.000005> 32459 1350825681.527942 read(3, ""..., 3350) = 3350 <0.000313> 32459 1350825681.528286 close(3) = 0 <0.000005>V pripade, ze soubor jiz existuje, je to jednodussi, ale z nejakeho duvoud dojde ke dvoum statum na strane serveru:
25558 1350830502.774044 lstat("linux-3.4.9-gentoo/arch/arm/mach-tegra/board-seaboard.c", {st_mode=S_IFREG|0644, st_size=7902, ...}) = 0 <0.002337> ..... 25558 1350830502.868738 lstat("linux-3.4.9-gentoo/arch/arm/mach-tegra/board-seaboard.c", {st_mode=S_IFREG|0644, st_size=7902, ...}) = 0 <0.000014>Na strane klienta:
32643 1350830500.817663 lstat("linux-3.4.9-gentoo/arch/arm/mach-tegra/board-seaboard.c", {st_mode=S_IFREG|0644, st_size=7902, ...}) = 0 <0.000006>Tj. na serveru se pro novy soubor dela paradoxne daleko vic metadata operaci. Na filesystemech, kde jsou metadata operace pomale, coz jsou typicky distribuovane FS , to pak jede velmi pomalu. Jestli jsem to pochopil spravne, tak je to prave Vas priklad? Jestli ano, jak dlouho trva projit tech 10M souboru findem pri COLD cachi (sync; echo 3 > /proc/sys/vm/drop_caches) na strane klientu a serveru? Navic rsync ve verzi < 3.0.0. nejdrive udela incremental list a pak az prochazi soubory, od verze 3.0.0 to uz dela naraz. Jakou mate verzi, jake mate OS, verzi jadra? A jaka je latence mezi klientem a serverem?
rsync --version rsync version 3.0.9 protocol version 30 Copyright (C) 1996-2011 by Andrew Tridgell, Wayne Davison, and others. Web site: http://rsync.samba.org/ Capabilities: 64-bit files, 64-bit inums, 64-bit timestamps, 64-bit long ints, socketpairs, hardlinks, symlinks, IPv6, batchfiles, inplace, append, ACLs, xattrs, iconv, symtimes
Linux w12 3.2.0-29-generic #46-Ubuntu SMP Fri Jul 27 17:03:23 UTC 2012 x86_64 x86_64 x86_64 GNU/LinuxLatence mezi serverem a klientem by měla být minimální, protože se oba nacházejí na stejném serveru.
Projití 10M souborů trvá několik hodin. Resp. dnes ráno jsem pustil find a ještě nedoběhl.s tím bych tedy pracovat nechtěl, když to srovnám s jednojádrem LE-1640 a 5400ot disky v mirror-u na LVM s ext3.
time find / | wc -l 1124504 real 2m55.660s user 0m0.576s sys 0m1.908sOpakovaně:
real 0m9.881s user 0m1.064s sys 0m1.724sTak mi to přijde jako moc velký rozdíl.
Diky za info. Kdyz jsem psal distribuovany FS, mel jsem na mysli i clusterovy FS - v tomto pripade je to celkem jedno, protoze v obou pripadech musite hlidat konzistenci dat a resit distribuovane zamky. OCFS2 skoro neznam, ale jelikoz pouziva DLM, metadata operace budou o rad drazsi.
Jestlize Vam samotny find jede takto dlouho, rsync na vine neni, ale taky tady neni moc co optimalizovat. Nenapada me moc, jak to pri stavajicim FS delat nejak vyrazne rychleji. Je otazka, jestli ma OCFS2 nejakou feature, ktera by se dala vyuzit (treba GPFS umi ten seznam zmenenych souboru generovat samo). Pokud ne, je treba hledat asi uplne jiny postup. Co takhle snapshoty? Nad LVM nebo mozna primo na urovni pole?
Je to asi rok, co jsem si hral s lsyncd, tj. na bazi inotify, ale taky jsem narazil na to, ze to neni uplne delane na takove mnozstvi souboru. Mozna bych inotify mechanismus ale uplne nezatracoval, treba jen v lsyncd delaji neco spatne.
root@web:~# time find /iscsi/home/ -type f |wc -l 10696002 real 619m58.719s user 1m26.397s sys 108m56.076s root@web:~# time find /iscsi/home/ |wc -l 12047276 real 42m20.375s user 0m27.078s sys 6m35.977sPokud nechám find běžet bez jakýchkoliv parametrů, tak mu projití cca 12M souborů trvá cca 42 minut.
root@web:~# sync; echo 3 > /proc/sys/vm/drop_caches root@web:~# time find /iscsi/home/ |wc -l 12052096 real 50m38.067s user 0m27.738s sys 7m14.467s root@web:~# time find /iscsi/home/ |wc -l 12052327 real 0m29.497s user 0m8.017s sys 0m22.129s root@web:~# time find /iscsi/home/ |wc -l 12052383 real 0m28.665s user 0m7.816s sys 0m21.513s
Zrovna jsem se na to chovani findu vcera dival. Kdyz se mu rekne -type f, zacne find stat()ovat vsechny soubory, na ktere saha. Je to trochu skoda, protoze typ souboru se da od nejake verze 2.6.4 kernelu (a pravdepodobne i v zavislosti na filesystemu) se drzi primo v dentry, tj. pro zjisteni typu souboru neni potreba delat volalni stat(). Kdyz se mu "-type f" nerekne, tak stat() na soubory nedela.
To ale prilis neresi problem s rsyncem, ktery stat() proste volat musi. Tj. OCFS2 je na stat() proste pomale, takze bud jiny FS, nebo uplne jiny pristup.
> time find / -type f | wc -l 913191 real 2m32.735s user 0m0.596s sys 0m1.640s
time find /mnt/zaloha_1 -type f | wc -l 181213 real 0m9.366s user 0m0.126s sys 0m0.760slokální disk 2TB/5400ot filesystem NTFS (společná data pro pracovní win instalaci)
time find /windows/zaloha_2 -type f | wc -l 368354 real 1m52.077s user 0m0.748s sys 0m3.349ssíťový disk 2,7TB na domácím serveru/NAS, připojení NFS4 fyzická realizace soft RAID5 4x1,5TB, procesor serveru úsporné dvoujádro Zacate s 4GB paměti.
time find /mnt/basic -type f | wc -l 762845 real 5m57.818s user 0m1.448s sys 0m11.628sJe zajímavé, že v průběhu find žádná komponenta nebyla na limitu, přesto hledání nebylo rychlejší. (zátěž sítě cca 1,5MB/s - 15%, CPU serveru cca 40% jednoho jádra, zátěž disků na serveru cca 10%, CPU klienta cca 5%)
Tiskni
Sdílej: