QL.túra

Kulturális smörgåsbord Esterházytól Wass Albertig, a gumicsizmától az iPad-ig, a Teletabiktól Sexpírig, a makrofágtól a mikrokontrollerig, miazmás...

Címkék

2000 (20) 2001 (6) 2002 (16) 2003 (164) 2004 (61) 2005 (40) 2006 (31) 2007 (28) 2008 (33) 2009 (175) 2010 (188) 2011 (201) 2012 (86) 2013 (40) 2014 (36) 2015 (26) 2016 (10) adáshiba (91) android (1) animáció (93) cygwin (3) film (410) gezarol (13) hájtek (159) hangoskönyv (32) ipad (17) klip (12) könyv (191) linux (29) színház (169) vers (17) windows (37) zene (111) Címkefelhő

+jegyzések

Most ...

... múlok .osan

bmi_tiny.png


... hallgatom
Szabó Magda: Régimódi történet
https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcSqTmZEqlCRFgojyt52Q2n_qiMTyVlt-zJu-DpbNKVY6OQbBh4u


... olvasom
Alexander Steele (szerk.): Kezdő írók kézikönyve


... (Kik ezek? Kik ezek az embek? Kik ezek?)
profile for TrueY on Stack Exchange, a network of free, community-driven Q&A sites
free counters

[Hájtek] Debian: fsck boot alatt

2010.07.22. 10:00 | TrueY | 19 komment

Címkék: 2010 hájtek

Nagyon zavart, hogy minden 26. újraindításnál a debián csinált egy fsck-t a root filesystem-emen. Az rendben van, hogy egy journaling file-system-en is érdemes ezt megcsinálni, de azért a 26 kicsit sűrűnek tűnik. Főként annak fényében, hogy ketten használjuk a gépet és ez azt jelent, hogy legfeljebb 2 hetente végigbogarássza a diszket. Ehhez még hozzájön, hogy mindig "szépen" van leállítva. Azt sem éreztem túl szerencsésnek, hogy akkor is elkezdi a diszket ellenőrizni, ha akkumulátorról megy a laptop. Ezért felkutattam, hogyan lehet ezt a beállítást megváltoztatni.

A boot folyamat közben, eléggé az elején jön fel az fsck üzenete, hogy a root partíció clean. Tehát keressünk a /etc/init.d könyvtárban valami beszédes nevű szkriptet. Találtam is egy "checkroot.sh" shell szkriptet. Böngésszünk csak bele.

Olvasás közben találtam pár "$rootcheck" = yes sort. No ez már gyanús. Kb. a közepén egy ilyen megjegyzést is találtam:

# Disabled AC power check until fsck can be told to only check the
# file system if it is corrupt when running on battery. (bug #526398)
Az alatta levő sorokat kell egy picit átírni és akkor aksiról nem fog fsck-zni. Ezek elől kiszedtem a '#'-ot:

if which on_ac_power >/dev/null 2>&1 && [ "$rootcheck" = yes ]
then
        on_ac_power >/dev/null 2>&1
        if [ "$?" -eq 1 ]
        then
                log_warning_msg "On battery power, so skipping file system check."
                rootcheck=no
        fi
fi

Ez elé meg betettem egyet:

 #rootcheck=yes

No ezzel megvagyunk. Marad a kérdés, hogy mitől fsck-zik minden 26-ikra. A szkriptből ez nem derült ki számomra. Külső file-ra nem hivatkozik. Akkor marad az, hogy a filesystem tudja magáról, hogy mikor volt ellenőrizve. Némi guglizás után találtam egy tune2fs programocskát. A szokásos módon működik "tune2fs mit_csináljon melyik_FSen_csinálja". Először a melyik kérdésre kell a választ megkeresni. Mondjuk "df"-fel, vagy a mount-tal meg lehet nézni, hogy a root fs ("/") melyik partícióra van mount-olva. A /dev/sda1 lett a nyertes. Néhány a hasznosnak talált lehetőség közül:

tune2fs -c 100 /dev/sda1 # minden 100-ikra ellenőriz
tune2fs -C number /dev/sda1 # beállítja, hogy hanyadik mount-nál áll
tune2fs -i 30 /dev/sda1 # minden 30 nap elteltével ellenőriz
tune2fs -l /dev/sda1 # mindenféle okosságot kilistáz

Én végül is az elsőt adtam meg. Illetve a checkroot.sh-ba beletettem egy sort az fsck-zó blokk elé:

tune2fs -l /dev/sda1|fgrep -e "Mount count:" -e "Maximum mount count:" -e "Last checked:" -e "Next check after:" -e "Filesystem state:"

Így látom, hogy hanyadik mount-nál tartok és eldönthetem, hogy inkább lejjebb veszem a mount számlálót (tune2fs -C...), vagy inkább beállítom, hogy a következőre csinálja meg. Lehet erőltetni is az fsck futását. A shoutdown -F paramétere erre jó. Ez létrehoz egy /forcefsck file-t, amit persze mi is megtehetünk. A checkroot.sh ennek a file-nak a megléte alapján is elvégzi a rárótt feladatot.

Az is meg lehet persze oldani, hogy ha boot alatt bekapcsolom a Caps Lock-ot, akkor megcsinálja az fsck-t. A /etc/init.d/checkroot.sh-hoz a kiemelt részeket adtam hozzá:

/usr/bin/setleds|awk '/^Current leds:/{exit $6!="on"}' && fforce=1
...
        if [ "$rootcheck" = yes ]
        then
                if [ -f /forcefsck -o -n "$fforce" ] || grep -s -w -i "forcefsck" /proc/cmdline

Állítgassunk valamit minden nap!

A bejegyzés trackback címe:

https://qltura.blog.hu/api/trackback/id/tr982077828

Kommentek:

A hozzászólások a vonatkozó jogszabályok  értelmében felhasználói tartalomnak minősülnek, értük a szolgáltatás technikai  üzemeltetője semmilyen felelősséget nem vállal, azokat nem ellenőrzi. Kifogás esetén forduljon a blog szerkesztőjéhez. Részletek a  Felhasználási feltételekben és az adatvédelmi tájékoztatóban.

Hmm, en mondjuk servereken scriptet irtam ra, hogy x idonkent ellenorizze. Amugy jo magasan van az ertek, de ha valamit berhelek, gyakran ujra kell inditani es nem szerencses, ha akkor fsck-zik.

#!/bin/bash
/sbin/fdisk -l | grep Linux | grep -v swap | awk '{print $1}' > /tmp/wincsik # Kigyujtjuk a Linux particiokat
MAXHOUR=24 # Hany ora kulonbseg lehet max. az aktualis ido es a "lejart" ido kozott
RESTART=0 # Alapbol nicns restart
while read
do
WINCSIHOUR=`expr $(date -d "$(/sbin/tune2fs -l $REPLY | grep Next | cut -c27-)" +%s) / 3600`
NOWTIMEHOUR=`expr $(date +%s) / 3600`

if test $NOWTIMEHOUR -gt $WINCSIHOUR
then VANIDO=$(expr $NOWTIMEHOUR - $WINCSIHOUR)
else VANIDO=$(expr $WINCSIHOUR - $NOWTIMEHOUR)
fi

if test $VANIDO -le $MAXHOUR
then RESTART=1
fi

done < /tmp/wincsik

if /usr/bin/test $RESTART -eq 1
then
while read
do /sbin/tune2fs -C $(expr $(/sbin/tune2fs -l $REPLY | grep "Maximum mount count" | awk '{print $4}') + 1) $REPLY
done < /tmp/wincsik
/sbin/shutdown -r now
fi
@Celtic: Szia!

A laptop-on van olyan finomság, hogy lehúzott táppal nem csinálja az fsck-t. :) Nekem nem kell server-eket idomítanom! A feleségem meg gyorsan megszokta a debina-t. Kénytelen volt. :)

Kis megjegyzések a script-ed hez.

Ha awk-ot használsz, akkor minek indítasz el még két grep-et? Tök felesleges ilyen pipe kígyókat növeszteni!

Kb. így nézne ki:
awk '/Linux/ && !/swap/ {print $1}'
ha precízebb szeretnél lenni, akkor
awk '$2 ~ /Linux/ && $3 !~ /swap/ {print $1}'
(nem tudom fejből az fsck kimenetét, a $2, $3-at csak saccoltam. Bocs!)

Bár szerintem az fsck is felesleges. Most csak cygwin-en tudom nézni, de szerintem /proc/mounts lehet a Te barátod. Virtuális fs-t olvasni szerintem jobb, mint programot indítani.

Az expr hívások helyett én $(( )))-t használnék matematikai kifejezések kiértékelésére. Nem kell meghívni az expr-eket! Kb. így:
echo $(($(date +%s) / 3600))

A test helyett használhatod a '[' ']' jelölést
if [ "$VANIDO" -le "$MAXHOUR" ]; then
vagy a kicsit okosabb, bár kicsit másként is működő '[['-et.

Hmmm, nem is tudtam, hogy a read a REPLY-ba olvas, ha nincs argument. Én így még soha nem használtam. Én megadnék egy paramétert, mert úgy mások által jobban látható a szándékod. A 'while read fs'...

Én nem file-ba tenném az awk kimenetét, hanem egy tömbbe
arr=( $(/sbin/fsck -k | awk '/Linux/ && !/swap/ {print $1}'))
ez után a while helyett ezt használhatod:
for fs in ${arr[*]}; do

Nem értem, hogy miért nem simán a NOWTIMEHOUR-ból vonod ki a WINCSIHOUR-t! Minek az abs implementáció? Így mindig pozitív értéket fogsz kapni! Az eredmény esetleg lehet nagyobb, mint a MAXHOUR, ha valami miatt sokat nem futott a script. A negatív érték pedig amúgy is mindig kisebb, mint a MAXHOUR. Szerintem az első if felesleges.

Ha elért a RESTART=1-hez, akkor egy break-ot érdemes betenni utána. Ne fusson feleslegesen tovább a ciklus.

A NOWTIMEHOUR-t elég lenne egyszer, a cikluson kívül kiszámolni. Ha a MAXHOUR-t felszorzod 3600-zal, akkor elmaradhat az osztás a ciklusban. Sokszor kettő - egy osztást spórolsz. :)

Én a grep-cut páros helyett is awk-ot használnék. Ha már egyszer úgy is meghívtad, ott csücsül cache-ben.

Bár elgondolkodnék, hogy nem lenne érdemes awk-ban újraírni az egészet. Az első sor lenne a "#!/bin/awk -f", a többi awk kód. Bár akkor inkább perl. :) és akkor a date-ket is belülről lehetne hívogatni.

;)
nekem minden bootnal fsck-zik, hisz ext4-gyel megvan 5-7 masodperc alatt, akkor pedig miert ne?
adattarolasnal a biztonsag fontosabb mindennel.
@moli: Azt hiszem nekem ext2-m van (de nem vagyok biztos benne). Az jó negyed óráig elszöszög, akkor is, ha minden ok.
@TrueY: en.wikipedia.org/wiki/Ext4
"Extents
Extents replace the traditional block mapping scheme used by ext2/3 filesystems. An extent is a range of contiguous physical blocks, improving large file performance and reducing fragmentation. A single extent in ext4 can map up to 128 MiB of contiguous space with a 4 KiB block size.
Faster file system checking
In ext4, unallocated block groups and sections of the inode table are marked as such. This enables e2fsck to skip them entirely on a check and greatly reduces the time it takes to check a file system of the size ext4 is built to support. "
en.wikipedia.org/wiki/File:E2fsck-uninit.svg
@moli: Köszi az infót! Most ezért egy sima laptop-on nem húznám újra a gépet. :)
@moli: Köszi! Akkor nekidurálom magam. Oszt lesz abból is egy poszt. :)
ez a bloghu egy csoda.

backupot azert csinalj mindenrol, nekem a biztonsagosnak allitott ext3 particio-atmeretezeskor veszett el minden (raadasul gparted-del, ami bolondbiztos kellene legyen), ra 1 hetre ra munkatarsamnak ugyanez, ugyanugy megismetlodott.
@moli: Miért csoda a blog.hu?

Akkor ez a végtelenbe fog tolódni. Most nem fogok nekiállni kibogyózni, hogy mi az, ami nagyon kell.

Bár tudom, hogy kellene, de most az a gép, amire backup-olni tudnák be van ásva egy csomó rács mögé. :) Majd, ha a fiam pár évvel idősebb lesz. :)
@TrueY: 15 masodperccel hamarabb valaszoltal arra, amit irtam es meg el is kellett olvasnod...
@TrueY: Naja, ha ismernem akar az awk, akar a perl-t :) Bar perlnek mindig neki akarok allni, csak sosincs ra idom. Azert igy van megvalositva, mert szabadidoben dobtam ossze, par eve. Ma biztos maskent csinalnam (latszik is, hol forditott aposztrof, hol $() van a beagyazott parancsra)
expr helyett nem ismerem a $()-t (elhiszem, hoyg mukodik, nekem vmiert az expr jott be)
read $REPLY: ezt egyszer a hup.hu-n mondtak, mert otletem sem volt, hogyan lehetne egy filet soronkent feldolgozni. Aztan ugy megragadt, hogy mindig ezt hasznalom :) Ugyanugy mint az awk sortordelesre (ide is szinte mindig ezt, bar a cut jobb lenne talan)
Megszokasok miatt.
Amugy mar jopar wincsit atallitottam ext4-re, de semmi kulonbseg nem tunt fel. Mondjuk, le is szedtem roluk a fileokat es visszamasoltam, de akkor sem.
@Celtic: Nekem a felesleges pipe kígyók a kedvenceim. A legjobb, ha "cat file | grep ... | grep ...| awk ... | wc"-t használnak. Nagyon jellemző. Az awk-ot pont e miatt érdemes megtanulni. Viszonylag egyszerű, de hatékonyan lehet vele a felesleges programokat kigyomlálni.

Megnéztem és a /sbin/fdisk-nek mit kellene adnia? Nekem nem ír ki semmit.
@TrueY: Hat igen, en is gyakran hasznalok egymasra pipe-olt dolgokat. Elvezem :)

Akkor hibas az a sor (nem jol masoltam):
fdisk -l: kilistazza az osszes eszkoz particiojat. Nyilvan egyszerubb lenne a /proc-bol, erre nem gondoltam (foleg, hogy ketszer is jartam ugy, hogy a lenny->squeeze valtasnal eltuntek a /dev-bol a wincsik, fdisk -l sem latta, csak a /proc alatt voltak meg. Vagy ott sem ? Mar nem emlekszem, tobb honapja volt.)
@Celtic: Hmmm. Nekem nem listázza a -l. Milyen Linux distib-ed van? Úgy látom, hogy fdisk-ből is több változat van. :(
Debian, Ubuntu es CentOS alatt is mukodik.
@Celtic: Debian. Beírtam, hogy /sbin/fdisk
erre egy help-et ír ki, amiben ez áll:
...
fdisk [options] -l <disk> list partition table(s)
...

Hmmm... Aha, megvan! Csak root-ként működik. De nem értem, hogy miért, mert a help szerint nem kellene neki. A man-ja szerint viszont rendben van! :)

A man azt is elmondja, hogy a /proc/partitions-t érdemes nézegetni.

Na, akkor ismét tanultam valamit. :) Kösz!
@Celtic: (kis kiegészítés, mert újra olvasva jómagam sem értem, hogy mit írtam. :) )

Szóval a man-ja szerint jó az "fdisk -l", de --help alapján nem. És csak root-ként ír ki akármit is. Ezt nem értem, mert a -l igazán működhetne akármilyen user nevében is. Nem látok biztonsági problémát...
süti beállítások módosítása