[HowTo] fsck beim shutdown anstatt bei Start des Systems

  • Hallo Leute,


    da mich das fsck beim Systemstart immer genervt hat (dauert ewig, Aufnahmen werden abgeschnitten) habe ich ein Skript (um)geschrieben, welches kontrolliert, ob die von fsck zu checkenden Laufwerke beim nächsten Systemstart überprüft werden. Wenn das Skript ein solches Laufwerk findet, dann wird fsck für dieses Laufwerk vom Skript ausgeführt.
    Das Skript kann beim Shutdown ausgeführt werden, wo ein langwieriges fsck beim VDR nicht stört.


    Die Besonderheit des Skriptes ist, dass es automatisch die zu überprüfenden Laufwerke aus der /etc/fstab liest.


    Folgendes HowTo für Ubuntu (sollte bei anderen Distris gleich sein):


    Erstellen einer Datei /etc/init.d/force-fsck (z.B. mit vi, nano, mcedit, joe)
    Folgendes kommt da rein...



    # Datei Speichern und Skript ausführbar machen:
    chmod 775 /etc/init.d/force-fsck


    # Symlinks erstellen, die beim Shutdown ausgeführt werden:
    ln -s /etc/init.d/force-fsck /etc/rc0.d/S61force-fchk
    ln -s /etc/init.d/force-fsck /etc/rc6.d/S61force-fchk


    Jetzt sollte es funktionieren.
    einfach zum testen in der Console: "/etc/init.d/force-fsck"
    aufrufen.


    Den MaxMountCount einer Platte (hier /dev/hda3) kann man mit: "tune2fs -c30 /dev/hda3" auf z.B. 30 setzten.
    Zum Testen kann man den MountCount der Platte mit "tune2fs -C29 /dev/hda3" auf 29 setzen.


    Siehe auch: [HowTo]C´T VDR - nerviges fsck vom Start beim Shutdown erledigen + passende Animation für GraphLcd


    Gruß
    Steffen

  • Hallo


    tolle Idee , hab nur eine Frage der Inhalt meiner fstab ist


    geprüft wird aber nur das erte Laufwerk.

    Code
    /etc/init.d # ./force-fsck /dev/disk/by-id/scsi-SATA_IC35L080AVVA07-_VNC402A4GZK62G-part1 -> Mount count = 156. 
    /dev/disk/by-id/scsi-SATA_IC35L080AVVA07-_VNC402A4GZK62G-part1 -> Maximum mount count = 500.
     /dev/disk/by-id/scsi-SATA_IC35L080AVVA07-_VNC402A4GZK62G-part1 -> No need to run fsck.
     /dev/disk/by-id/scsi-SATA_IC35L080AVVA07-_VNC402A4GZK62G-part3 -> Mount count = 156. 
    /dev/disk/by-id/scsi-SATA_IC35L080AVVA07-_VNC402A4GZK62G-part3 -> Maximum mount count = 500. 
    /dev/disk/by-id/scsi-SATA_IC35L080AVVA07-_VNC402A4GZK62G-part3 -> No need to run fsck. 
    /etc/init.d #


    rookie1

    VDR 4: AMD Kabini 5310, Asrock AM1H-ITX, Gen2Vdr V6, Cine S2, Atric , Harmony 515 , Streacom ST-F7CB EVO

  • Zitat

    Original von rookie1
    geprüft wird aber nur das erte Laufwerk.

    Code
    /etc/init.d # ./force-fsck /dev/disk/by-id/scsi-SATA_IC35L080AVVA07-_VNC402A4GZK62G-part1 -> Mount count = 156. 
    /dev/disk/by-id/scsi-SATA_IC35L080AVVA07-_VNC402A4GZK62G-part1 -> Maximum mount count = 500.
     /dev/disk/by-id/scsi-SATA_IC35L080AVVA07-_VNC402A4GZK62G-part1 -> No need to run fsck.
     /dev/disk/by-id/scsi-SATA_IC35L080AVVA07-_VNC402A4GZK62G-part3 -> Mount count = 156. 
    /dev/disk/by-id/scsi-SATA_IC35L080AVVA07-_VNC402A4GZK62G-part3 -> Maximum mount count = 500. 
    /dev/disk/by-id/scsi-SATA_IC35L080AVVA07-_VNC402A4GZK62G-part3 -> No need to run fsck. 
    /etc/init.d #


    Wieso? Es werden doch beide Laufwerke:
    /dev/disk/by-id/scsi-SATA_IC35L080AVVA07-_VNC402A4GZK62G-part1
    /dev/disk/by-id/scsi-SATA_IC35L080AVVA07-_VNC402A4GZK62G-part3
    geprüft?


    Gruß
    Steffen

  • Hallo,


    das liegt daran, dass in der fstab die Überprüfung disabled ist:


    ...
    /dev/disk/by-id/scsi-SATA_SAMSUNG_SP2514NS08BJ1JL615911-part1 /sicherungen ext3 noauto,acl,user_xattr 0 0
    ...


    ...
    cut -f1 -d"#" /etc/fstab | awk '$6 > 0 {print $1}' | while read HDD; do
    ...


    Laufwerke, deren "pass" auf 0 steht, werden nicht mit fsck überprüft.


    Grüße Chris

    ALT: Athlon XP 2400+, 2GB RAM, 1,5 TB HDD, Radeon 9500 Pro 128MB, Hauppauge WinTV Nova-T Lite, WinMCE Fernbedienung | Ubuntu 8.10 | VDR 1.6.0-2: xineliboutput live conflictcheckonly epgsearchonly streamdev-server femon epgsearch quickepgsearch | XBMC 8.10final1

  • Hallo,


    Zitat

    Original von rookie1

    Code
    /etc/init.d # ./force-fsck /dev/disk/by-id/scsi-SATA_IC35L080AVVA07-_VNC402A4GZK62G-part1 -> Mount count = 156. 
    /dev/disk/by-id/scsi-SATA_IC35L080AVVA07-_VNC402A4GZK62G-part1 -> Maximum mount count = 500.
     /dev/disk/by-id/scsi-SATA_IC35L080AVVA07-_VNC402A4GZK62G-part1 -> No need to run fsck.
     /dev/disk/by-id/scsi-SATA_IC35L080AVVA07-_VNC402A4GZK62G-part3 -> Mount count = 156. 
    /dev/disk/by-id/scsi-SATA_IC35L080AVVA07-_VNC402A4GZK62G-part3 -> Maximum mount count = 500. 
    /dev/disk/by-id/scsi-SATA_IC35L080AVVA07-_VNC402A4GZK62G-part3 -> No need to run fsck. 
    /etc/init.d #


    sind 500 Mounts nicht etwas viel, oder habt Ihr ähnliche Werte? Ich habe diese bei ca. 30 stehen - ist das evtl. zu wenig?


    Marcus

    My VDRs:

  • Ich habe auf meiner Linux Kiste vdr und xbmc laufen.


    Dafür benutze ich 3 Partitionen:


    UUID=c4b78b8d-e383-49a0-a408-030598b3624b / ext3 relatime,errors=remount-ro 0 1
    UUID=81c0cce0-abfb-45ce-8f73-74cfd1a02818 /data ext3 noexec,nosuid,nodev,noatime 0 2
    UUID=7c79f1b1-169d-4aa1-8f45-cc6a5f2333a2 /data/Medien/Videos ext3 noexec,nosuid,nodev,noatime 0 2


    /dev/mapper/sil_ajabeicffbfc1
    19G 1,4G 17G 8% /
    /dev/mapper/sil_ajabeicffbfc3
    439G 60G 375G 14% /data
    /dev/sdc1 917G 202G 706G 23% /data/Medien/Videos



    / wird nach 20 reboots getestet
    /data (VDR und in MPG umgewandelte Aufnahmen) und /data/Medien/Videos (Sonstige Videos) jeweils nach 100 reboots, da dies sehr zeitintensiv ist.


    Würde aber empfehlen, die Systempartition nach 20-30 und die Datenpartitionen je nach Größe nach 50-100 reboot zu prüfen, oder häufiger beim shutdown.


    Alternativ kann man den max_count auch deaktivieren und auf ein max_time umstellen, und hier dann alle 30 Tage. Je nachdem, wie oft der VDR zum aufnehmen geweckt wird.

    ALT: Athlon XP 2400+, 2GB RAM, 1,5 TB HDD, Radeon 9500 Pro 128MB, Hauppauge WinTV Nova-T Lite, WinMCE Fernbedienung | Ubuntu 8.10 | VDR 1.6.0-2: xineliboutput live conflictcheckonly epgsearchonly streamdev-server femon epgsearch quickepgsearch | XBMC 8.10final1

    3 Mal editiert, zuletzt von cernst ()

  • Ich möchte diesen alten Thread nochmal aufwärmen ;)


    Meine Platten sind per UUID in der fstab gespeichert- und daran scheitert das Skript in der Zeile 11, da es die UUIDs nicht auflösen kann. Im Manual zu tune2fs konnte ich jetzt nichts finden, um tune2fs die UUID anstelle der Gerätedateien zu übergeben, die Option -U erzeugt nur neue UUIDs, wenn ich hier richtig gelesen habe.


    Ich würde das Skript gerne einsetzen (XBMC führt einen fsck beim Booten aus) und ein 2 TB Check kann einem so manche Aufnahme verhageln. Wo muss ich da ansetzen?


    BJ1


  • Code
    ls -l /dev/disk/by-uuid


    Grüße
    Miguel

    VDR1: P5b-DE, E8400, 5TB Seagate Platten, squeezevdr/xbmc Frodo 2*Cinergy-1200, TT S2-3200,G210 MultiSeat für LG-32LD420+Desktop
    VDR2: AMD 5050e, Asus m3n78-pro, 2.5'' HDD, YAVDR-0.4, PT-AX100E+26'' BilligGlotze
    Server: Seagate Dockstar mit 2.5'' HDDs für Web/Mail/File/Print/Lirc/Musik 24/7

  • ls -l /dev/disk/by-uuid


    liefert:

    Code
    xbmc@Horus:/$ ls -l /dev/disk/by-uuid
    total 0
    lrwxrwxrwx 1 root root 10 2012-06-19 17:35 00c346c6-8c31-4486-892b-de5193b61aac -> ../../sda1
    lrwxrwxrwx 1 root root 10 2012-06-19 18:54 17b63a1e-a999-46ad-9858-42ca0b65a29c -> ../../sdc1
    lrwxrwxrwx 1 root root 10 2012-06-19 18:54 3fce1321-c776-4751-8f1c-868a1bd86ddc -> ../../sdb1
    lrwxrwxrwx 1 root root 10 2012-06-19 17:35 897d2fe6-617d-46b1-87ec-a07a75eb51d1 -> ../../sda5


    Sorry, ich bin im Skript-skripten leider nicht so standfest... Die ../../sdxx müssen also "nur" gegen /dev/sdxx in Zeile 7 auf HDD substituiert werden? Das übersteigt mein Abstraktionsvermögen ;(. Da brauche ich wahrscheinlich nochmal den letzten Stoss ;)


    BJ1

    Einmal editiert, zuletzt von BJ1 ()

  • Du kannst im Prinzip direkt die UUID benutzen, um an das Gerät zu kommen (wenn dein Skript den Links folgt)


    Ansonsten hat gemuesepudding aka V_R es unter yaVDR 0.5 so gelöst (als /etc/init.d/force-fsck): http://paste.ubuntu.com/1049885/

    yaVDR-Dokumentation (Ceterum censeo enchiridia esse lectitanda.)

  • Ansonsten hat gemuesepudding aka V_R es unter yaVDR 0.5 so gelöst (als /etc/init.d/force-fsck): http://paste.ubuntu.com/1049885/


    Danke für den Link. Nach ein paar Modifikationen scheint es zu laufen. Hier der Output:


    Code
    xbmc@Horus:/usr/src$ sudo ./test
    checkin /dev/sda1
    Mount count = 20. Maximum mount count = 24.
    No need to run fsck.
    checkin /dev/sdb1
    Mount count = 1. Maximum mount count = 100.
    No need to run fsck.
    checkin /dev/sdc1
    Mount count = 28. Maximum mount count = 100.
    No need to run fsck.


    Das deckt sich mit den Angaben von tune2fs


    Nochmals Danke ;)

  • Ich hätte da eine Lösung nur mit sed.
    Unterstützt UUID und Label mounts und sollte eigentlich auch robust sein, was die Formatierung der fstab angeht.
    Der Schnipsel passt in die ursprüngliche Version des Skripts, einfach die Zeile

    Code
    DrivesToCheck=...

    dagegen austauschen.


    Ist aber bislang erst im Beta-Stadium.
    Ich hab schon mit sämtlichen meiner fstabs erfolgreich getestet, aber es ist noch nicht im produktiven Betrieb.

    Gruss
    SHF


  • Ich nutze auch UUIDs in der fstab und habe obiges Script wie folgt geändert:


    Gruss
    Marcus

    My VDRs:

  • Hi,


    habe gerade das nette Konstrukt für awk in Zeile 21 entdeckt ...
    Ließe sich das so erweitern, dass nur die UUID der Platten ausgegeben werden, die auch mit "ext" anfangen? Wenn ja, wie???
    tune2fs auf andere Dateisysteme loszulassen ist ja eher unsinnig.


    Würde mich über einen entsprechenden Dip sehr freuen tun.


    Gruß Gero

    Ich bin verantwortlich für das, was ich schreibe, nicht für das, was Du verstehst!

  • Hallo Gero,


    vermutlich hast Du's inzwischen selbst gelöst. Falls doch noch jemand hier drüber stolpert und die gleiche Frage hat: ich habe

    Code
    cut -f1 -d"#" /etc/fstab | awk '$6 > 0 {print $1}' | cut -d"=" -f2 | while read HDD; do


    durch

    Code
    cut -f1 -d"#" /etc/fstab | grep " ext" | awk '$6 > 0 {print $1}' | cut -d"=" -f2 | while read HDD; do


    ersetzt.


    - Markus

    Client1: ASUS P5QC, Dual Core 3G, Cine S2, Ext. Board von TBE, Xubuntu 20.04, VDR 2.6x

    Client2: RPI3

    Server: RPI4, Sundtek SkyTV Dual 2x

  • Wozu überhaupt noch automatisches fsck? Ich schalte das immer ab. Mal davon ausgehend, dass das eingesetzte journaling fs stabil ist und korrekt arbeitet:

    • ohne write barriers kann noch ein Stromausfall im Betrieb für ein beschädigtes fs sorgen. Das kriegt man allerdings mit und kann dann manuell "fscken" :)
    • mit write barriers bleibt nur noch das Risiko eines Hardware-Schadens. Habe bisher einmal erlebt, dass sich eine Platte ohne Vorwarnung durch S.M.A.R.T. verabschiedet. Das war EXTREM ärgerlich, aber ich wage mal zu bezweifeln, dass ein fsck alle 30 mounts hier was gebracht hätte, das ist wohl eher unwahrscheinlich.


    Nur mal so als Anregung, für Datenverluste aufgrund dieser obszönen Idee übernehme ich natürlich keine Haftung :)

    Asrock A75 Pro4-M
    Debian wheezy (testing, stock) (aktuell 2012-08-24: Linux 3.2, VDR 1.7.28)
    vdr-sxfe (xineliboutput)
    Pioneer VSX-520-K

  • Hallo,


    sofern man das Skript unter Wheezy verwenden möchte, muss man die Zeile 33

    Code
    touch /etc/mtab


    ändern, da mtab bei Wheezy nun ein Link nach /proc/mounts ist und das proc-Filesystem bei der Abfrage schreibbar ist. Fazit: kein fsck, da das Skript meint, dass das root-Dateisystem noch schreibbar ist.


    Ich habe den touch einfach auf eine andere Datei im root-fs gelegt:

    Code
    touch /etc/init.d/checkfs-shutdown


    Gruss
    Marcus

    My VDRs:

  • Ich hätte noch 'ne kleine Änderung wenn bei einem FS der automatische Check abgeschaltet ist (tune2fs -C -1 <HDD>), +o. g. Anpassungen:


    Grüße,
    j.

    HW VDR: Thermaltake DH102 | Gigabyte GA-M720-US3 | AMD 270u | 8GB RAM | 120GB SSD System + 3TB HDD Daten | L4M Cine CT V6 + Flex S2 | Zotac GT630 | Futaba MDM166A | Atric IR-Einschalter Rev. 5 | NEC P553 | SEDU + 96 PIX | Pioneer SC-LX85 | Jamo S606
    SW VDR: Debian Wheezy | Kernel 3.2.0-4-amd64 | Mate 1.6 | VDR 2.2.0 | nVidia 331.79 | LIRC 0.9.0 | media_build_experimental | Plugins: permashift 1.0.3, softhddevice 0.6.1rc1-git, menuorg 0.5.1, skinnopacity 0.1.3, tvscraper 0.2.0-git, seduatmo 0.0.2-git, mplayer 0.10.2-hg, fritzbox 1.5.3, vdradmin-am 3.6.9, femon 1.7.19, targavfd 0.3.0, span 0.0.7, dvd 0.3.6-cvs, graphtftng 0.4.10-git, extrecmenu 1.2.4-git, epgsearch 1.0.1-git, block 0.1.2-git, cpumon 0.0.6a, ac3mode 0.1, HD-- 1.0.0-hg, u. v. a. ...

  • Hiermit sollte es mit UUID und altem /dev/xxx gehen.



    Gruß,
    Jörg

    debian 6.0.7 64-bit, kernel 3.10.0, 2xBudget-CI,Cine S2 V6.5,vdr (2.0.2/2.0.0), vdr-sxfe,remote-plugin + EPSON EH-TW4400 HD Beamer :)

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!