« anonymous cowardice? | Main | WG nutraukia savo blogą!.. »

kaip aš išgelbėjau sistemą

šiandien išgelbėjau sistemą nuo mirusio sisteminio disko, lengva ranka permesdamas sistemą + duomenis į gretimą HDD. istorija.

kadaise "ten" pastatėm FreeBSD 4 serverį. su vienu disku, da0 particijos buvo standartinės /, swap, /var, /usr -- kaip pasiūlė /stand/sysinstall. paskum "jie" pridėjo dar vieną diską, ad0. kadangi tuo metu skaitinėjau šitą straipsnį, naujajame diske sukuriau identiškas particijas -- /bkroot, swap, /bkvar ir tiesiog /data. kaip dabar suprantu, identiškai daryt visai nebuvo reikalo, tik root particijai gerai, kad buvo nuo nulinio sektoriaus ir panašaus dydžio. crontabui sudėjau tokį darbą: cd /bkroot && dump 0f - / | restore rf - (nugudrautą iš to paties straipsnio), kuris kasnakt permetinėjo root particiją į antrąjį diską. analogiškai cd /data && dump 0f - /usr | restore rf - darė /usr kopijas. nes maža kas.

maža kas atsitiko po metų. pirmasis diskas ėmė atsakinėti į viską žodžiais I/O error, sistema ėmė griuvinėti, pasikėlusi vėl kiek paveikdavo ir krisdavo vėl. santechnikas ve buvo iškviestas, pagirdytas kava ir pristatytas prie darbo:

  1. disklabel -r ad0 > /root/ad0.disklabel.orig

    ad0.disklabel.orig atrodė taip:

    # /dev/ad0c:
    type: ESDI
    disk: ad0s1
    label: 
    flags:
    bytes/sector: 512
    sectors/track: 63
    tracks/cylinder: 255
    sectors/cylinder: 16065
    cylinders: 523
    sectors/unit: 8417997
    rpm: 3600
    interleave: 1
    trackskew: 0
    cylinderskew: 0
    headswitch: 0           # milliseconds
    track-to-track seek: 0  # milliseconds
    drivedata: 0 
    
    

    8 partitions:
    # size offset fstype [fsize bsize bps/cpg]
    b: 2097152 204800 swap # swap
    c:156344517 0 unused 0 0 #
    e: 204800 0 4.2BSD 0 0 0 # /bkroot
    f: 20971520 2301952 4.2BSD 0 0 0 # /bkvar
    g:133071045 23273472 4.2BSD 0 0 0 # /data


    [na taip, tai nėra išmintingiausias disko suskaidymas, tų laikų /stand/sysinstall irgi nebuvo išmintingiausias, aš taip pat ;)]


  2. cp /root/ad0.disklabel.orig /root/ad0.disklabel.new

    vim /root/ad0.disklabel.new ir ten padariau tokį vaizdą:


    # /dev/ad0c:
    type: ESDI
    disk: ad0s1
    label:
    flags:
    bytes/sector: 512
    sectors/track: 63
    tracks/cylinder: 255
    sectors/cylinder: 16065
    cylinders: 523
    sectors/unit: 8417997
    rpm: 3600
    interleave: 1
    trackskew: 0
    cylinderskew: 0
    headswitch: 0 # milliseconds
    track-to-track seek: 0 # milliseconds
    drivedata: 0

    8 partitions:
    # size offset fstype [fsize bsize bps/cpg]
    a: 204800 0 4.2BSD 0 0 0 # /
    b: 2097152 204800 swap # swap
    c:156344517 0 unused 0 0 #
    e: 20971520 2301952 4.2BSD 0 0 0 # /var
    f:133071045 23273472 4.2BSD 0 0 0 # /usr



  3. ir užrašiau į diską naują disklabel į ad0: disklabel -R -B ad0 /root/ad0.disklabel.new. raktas -R liepia įrašyti disklabel iš failo, -B perrašo nurodyto disko bootloader'į iš failų /boot/boot1 ir /boot/boot2


  4. beliko pakoreguoti /etc/fstab, kad sistema dirbtų tik su ad0, persikrauti, BIOS nurodyti, kad IDE HDD 0 yra "first boot device" ir su džiugia nuostaba žiūrėti, kaip viskas veikia :)


paskui man dar siūlė po 50, bet kažkaip taip ir nepavyko...