Root RAID HOWTO cookbook Michael A. Robinton, michael@bzs.org <mailto:michael@bzs.org> v1.08, April 02, 1998 ¡´PÃ, fjwr@mtj.biglobe.ne.jp <mailto:fjwr@mtj.biglobe.ne.jp> 3 May 1998 ±Ì¶ÅÍ RAID Å\¬µ½t@CVXeð[gfBNgÆµÄ }Eg·é½ßÌû@ÆCLinux Ì initrd ðgÁÄÎÉÈé fallback VXeðìé½ßÌû@ðq×Ü·DRAID1 Æ RAID5 Ì md0 foCXð gp·é®SÈèð¦µÜ·DèÌeXebvÆêÉ»ÌÚIàྵ Ü·D±ÌÅÍ RAID1 Æ RAID5 ÌÝèü¯ÌC3ÂÌsÅÝè³êé ``/etc/raidboot.conf'' t@CÉí¹ÄÝèµ½êÊIÈ linuxrc ini- trd t@CðÜñŢܷD ______________________________________________________________________ Ú 1. ͶßÉ 1.1 {¶ÌÅVÅÌüè 1.2 oO 1.3 Ó« 1.4 ì \¦ 2. ìÆðnßéOÉKvÈ 2.1 KvÈpbP[W 2.2 ¼ÌÞÌÀn 2.3 ºÐÇñŨ«½¢¶ 2.4 RAID ÖAÌîñ 3. [gfBNgð RAID É·éû@ÌTà 4. RAID ð[gƵÄ}Eg·é½ßÌ initrd Ìðà 4.1 ZL eBÉÖ·éÓ 4.2 J[lÆ RAID c[Ì\z 4.3 initrd ÉæéyÑN®t@CVXeÌ\z 4.4 XebvEoCEXebvÌè 4.5 fBXgr [VÌCXg[ (Slackware ÌêÌÝ) 4.6 Linux pthreads ÌCXg[ 4.7 RAID c[ÌCXg[ 4.8 Vµ¢t@CVXe©çÌsvÈfBNgÆt@CÌí 4.9 /dev/mdx Ìì¬ 4.10 initrd ̽ßÌÌt@CVXeì¬ 4.10.1 N®/pÌ initrd t@CVXeÌì¬ 4.10.2 VXeÌC³ 4.11 `initrd' Å RAID foCX©çN®³¹é - linuxrc 4.12 Vbg_EpÌ rc XNvgÌC³ 4.13 Configuring RAIDBOOT - raidboot.conf 4.14 CRAID VXeÌ 'loadlin Æ LILO' ÌJ[lp[^wè 5. MÒÌdp RAID VXeÌÝè 5.1 VXeÌdl ¯¶}U[{[hªüÁÄ¢é2ÂÌVXeÌÝèðȺɦµÜ·D 5.2 n[hfBXNÌp[eBVª 6. RAID t@CVXeÌ\z 6.1 /etc/raid5.conf 6.2 /etc/raid1.conf 6.3 dp RAID t@CVXeð\z·é½ßÌïÌIè 7. ÅãÉÓ·é_ 8. t^ A. Bohumil Chalupa ³ñÉæé md0 ÌVbg_E 9. Vbg_EXNvgÌá 9.1 Slackware - /etc/rc.d/rc.6 9.2 Debian bo - /etc/init.d/halt and /etc/init.d/reboot 9.2.1 /etc/init.d/halt 9.2.2 /etc/init.d/reboot 10. t^ C: »Ì¼ÌÝèt@C 10.1 linuxrc ANAME CDATA linuxrc file(REF)REF 10.2 loadlin -- linux.bat file - boot.par ANAME CDATA linux.bat file - boot.par(REF)REF 10.3 linuxthreads Makefile.diff ANAME CDATA linuxthreads Makefile.diff(REF)REF 10.4 raid1.conf ANAME CDATA raid1.conf(REF)REF 10.5 raid5.conf ANAME CDATA raid5.conf(REF)REF 10.6 raidboot.conf ANAME CDATA raidboot.conf(REF)REF 10.7 rc.raidown ANAME CDATA rc.raidown(REF)REF 11. t^ D: â linuxrc ÆVbg_EXNvg 11.1 ât@C - linxurc 11.2 ât@C - Vbg_EXNvg 12. t^ E: Gadi Ì RAID â~ÉÖ·éLinux J[lpb` 13. t^ F: rc.raidown 14. t^ G: linuxrc Ì®ì´ ______________________________________________________________________ 1. ͶßÉ ÇÒÍFXÈ^CvÌ RAID ÌÀÆ»êçÌ_â_ðæí©ÁÄ¢é àÌƼèµÜ·D{¶Í` [gAÅÍÈCLinux VXeÅ RAID ð[gÉ}Eg·éû@Ì辯ð¦·àÌÅ·DLinux Ì RAID É¢Ämé½ßÉKvÈîñÍSĶàżڦ·©CQl¶£ÆµÄ¦ µÄ¢Ü·DÅ·©çÉ¿âÌ[ðéÌÍ»êçðæ²×½ãÅ sÁľ³¢D 1.1. {¶ÌÅVÅÌüè Root-RAID-HOWTO LaTeX (DVI â PostScript ðìêÜ·)CeLXgCHTML ÌetH[}bg ÅüèÅ«Ü·D sunsite.unc.edu/mdw/HOWTO/ <http://sun- site.unc.edu/mdw/HOWTO/> SGML Æ HTML `®ÅüèÅ«Ü·D ftp.bizsystems.com/pub/raid/ <ftp://ftp.bizsys- tems.com/pub/raid/> 1.2. oO ±Ì¶ð¢Ä¢é_ÅC[gÉ}Egµ½ RAID foCXªâ~· éâèÍ®SÉÍð³êĢܹñDEd Welbon ³ñªñĵCBohumil Chalupa ³ñªÀµ½ñðû@ͱ̶ÉÜÜêĢܷD±êÍ RAID1 Æ RAID5 foCXÌêÉCu[gÌ·¢ ckraid R}hªKvÅÍ ÈÈéÆ¢¤àÌÅ·D±Ìñðû@ðsíÈ¢ÆCVXeðÄN®·é xÉ md foCXÉ뵀 ckraid ªKvÆÈèÜ·D±ê¾Æå«ÈAC ÌêÉÍCVXeÌ«\ªåÉẵĵܢܷDMÒÌ Pentium 166, 128M ÌVXeãÅ®ìµÄ¢é 6G Ì RAID1 foCXÅÍC ÄN®ÌxÉ ckraid É30ªÈãà©©Áĵܢܷ :-( ]¬x 20MB/bÌ SCSI A_v^ÉÚ±µÄ¢é 15MKoCgÌ RAID5 ACÌê Í1ÔÈã©©èÜ·D ñðû@Æ¢¤ÌÍCVbg_EÉACÌóÔðÀÛÌu[gfoC XÉÛ¶µÄC±±Éu¢Ä éÅÉVXeð\zµ½ÌQÆXe[^ XÆär·éàÌÅ·DXe[^XªÄN®ÌÆ«ÉêvµÄ¢êÎACÌ X[p[ubNÍÌu[gÉÄ\z³êC»¤ÅȯêÎIy[^É Xe[^XG[ðÊmµCSÄÌ RAID c[ªgpÂ\ÈVXeª c³êÜ·D X[p[ubNðÄ\z·é±ÆÅCSÄÌhCuÉOKÌóðt¯çêÄ µÜ¢Cmdstop ðÀs¹¸ÉACÌd¹ªØç꽱ƪVXeɳ ³êé±ÆªN±èÜ·D±êÍSÄÌhCuÌXe[^XªVbg_E ÉOKÅ é굩³µ®ìµÜ¹ñDÙíª éhCuÅACª ®¢Ä¢éêÉÍCmd foCXðÄX^[g³¹éOÉÙíÈhCuð æèKvª èC»¤ÅȯêÎf[^ªóêĵܤ±Æª èÜ·D RAID0 ÌêÍVbg_EOÉ mdstop ðs¤Kvª³¢ÌÅCãḺ ÆÍ¢¸êà ÄÍÜèܹñD ±ÌâèÉεÄÅIIÉñijê½ðÍCinitrd ɽ finalrd ÆCfo CXª[hI[ÌÍVbg_EÉ clean tOð«Þ mdrootstopð±ü·é±ÆÅ·D¼Ìû@à«ÁÆÍ é±Æŵå¤D ÆÉ©C¡ÌƱëÍâèðð¯é±ÆÍūĢܷD±ÌâèðàÁÆ ¤Üð³ê½çºÐɨmç¹¾³¢D 1.3. Ó« ȺÌûX̶â[̨©°Å±Ì¶ª®¬µÜµ½DACfBAÌ ÙÆñÇͼÌlÌàÌðàçÁÄ«½àÌÅCͱêçð COOKBOOKÌ` ÉÜÆßC·®Ég¦éæ¤Éµ½¾¯Å·D o Linas Vepstas ³ñ <mailto:linas@linas.org> Ì RAID HOWTO ÅÙÆñÇ̱Æð׳¹Ä¢½¾«Üµ½D o Gadi Oxman ³ñ <mailto:gadio@netvision.net.il> ÉÍuflv̾çÈ¢¿âɦĢ½¾«Üµ½D o Ed Welbon ³ñ <mailto:welbon@bga.com> Ìf°çµ¢ initrd.md pbP[Wª«Á©¯Å±Ì¶ð±ÆÉ Èèܵ½D o Bohumil Chalupa ³ñ <mailto:bochal@apollo.karlov.mff.cuni.cz> ª ÄN®ÌuâèñðvðÀµÄ¾³Á½¨©°ÅC dÌ« ÅRAID ð[gÉ}EgµÄg¦éæ¤ÉÈèܵ½D o ±Ì¼ÉFXÈ_±ÌìÆð¯Ä¾³Á½ûXD 1.4. ì \¦ This document is GNU copyleft by Michael Robinton michael@bzs.org <mailto:michael@bzs.org>. Permission to use, copy, distribute this document for any purpose is hereby granted, provided that the author's / editor's name and this notice appear in all copies and/or supporting documents; and that an unmodified version of this document is made freely available. This document is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY, either expressed or implied. While every effort has been taken to ensure the accuracy of the information documented herein, the author / editor / maintainer assumes NO RESPONSIBILITY for any errors, or for any damages, direct or consequential, as a result of the use of the information documented herein. 2. ìÆðnßéOÉKvÈ RAID ðÝèµC^p·é½ßÉKvÈpbP[WâCÙÆñÇÌ^âɦ Äêé¶ðȺɦµÜ·DÈPÉÅàǢŷ©ç±êçÌ¿ÉÍÚ ðʵľ³¢D 2.1. KvÈpbP[W ܸÍȺÌpbP[WÌÅVÌo[Wðüè·éKvª èÜ·D o RAID, initrd, /dev/loopx ðT|[gµÄ¢é Linux J[l MÒÍ linux-2.0.33 <ftp://sunsite.unc.edu/pub/Linux/ker- nel/> ð sunsite ©çüèµÜµ½D o raid145-971022-2.0.31 <ftp://ftp.kernel.org/pub/linux/daemons/raid/> RAID1/4/5 ÌT|[g ðÇÁ·épb`Å·D o raidtools-pre3-0.42 <ftp://ftp.kernel.org/pub/linux/daemons/raid/> RAID ÌfoCXðì¬CÇ·é½ßÌc[(ƶ)Å·D o ``Gadi Ì RAID â~pb`'' ðt^ E ÉÜßĢܷD o linuxthreads-0.71 <ftp://ftp.inria.fr/INRIA/Projects/cristal/Xavier.Leroy> XbhÌ pbP[WªKvÅ·DEFuuEUÍg¦È¢ÌÅ FTP ð©ÁÄ ¾³¢D o CXg[Å«é Linux ÌfBXgr [V MÒÍ Slackware-3.4 <ftp://ftp.cdrom.com/pub/linux> ðgÁ ĢܷD KvÅÍÈ¢¯êÇCð§ÂàÌ o raidboot-0.01.tar.gz <ftp://ftp.bizsystems.com/pub/raid/> \ßì¬ ³êÄ¢é RAID /N®VXe {¶É¨¯éïÌIÈèÍãLÌpbP[WðOñɵĢܷDpbP [WÌo[WªXV³êÄ¢½èCÆÙÈé Linux ÌfBXgr [VðgÁÄ¢éêÉÍCïÌIÈèðÙÈé©àµêܹñD pb`âc[Ío[W 2.1 ÌJ[lÅÍÙÈéêª èÜ·D ÅV̶ðȺÅmFµÄ¾³¢D ftp.kernel.org/pub/linux/daemons/raid/ <ftp://ftp.ker- nel.org/pub/linux/daemons/raid/> 2.2. ¼ÌÞÌÀn ÍW [ÍgíÈ¢ÅCKvÈàÌÍSÄJ[lÉgÝÞ±Æɵ ܵ½DÌJ[lC[WÌ嫳ÍC³kµÄ 300k ƵŷD N®Â\È RAID foCXðìéÊÌû@ƵÄCEd Welbon <mailto:welbon@bga.com> Ì initrd.md.tar.gz ð©Ä¾³¢D±¿çÌû @ÅÍW [ðgÁĢܷDW [ðgÁÄÆÄଳ¢J[l ðìè½¢êÉÍC±ÌpbP[WÉÜÜêéÈPÈXNvgð©êÎC Ǥ·êÎ梩í©èÜ·D http://www.realtime.net/~welbon/initrd.md.tar.gz <http://www.realtime.net/~welbon/initrd.md.tar.gz> 2.3. ºÐÇñŨ«½¢¶ ܸ /usr/src/linux/Documentation/initrd.txt ÍÇñž³¢D »ê©ç raidtools pbP[WÉt®Ì¶â}j AàÇñž³ ¢DÁÉ man mdadd Æ QuickStart.RAID ÉÍÚðʵľ³¢D ȺÌàÌÉàÚðʵĨÆǢŵå¤D o BootPrompt-HOWTO <http://sunsite.unc.edu/mdw/HOWTO/BootPrompt- HOWTO.html> o man lilo o man lilo.conf 2.4. RAID ÖAÌîñ o sunsite.unc.edu/mdw/HOWTO/mini/Software-RAID <http://sunsite.unc.edu/mdw/HOWTO/mini/Software-RAID> o www.ssc.com/lg/issue17/raid.html <http://www.ssc.com/lg/issue17/raid.html> o linas.org/linux/raid.html <http://linas.org/linux/raid.html> o ftp.kernel.org/pub/linux/daemons/raid/ <ftp://ftp.kernel.org/pub/linux/daemons/raid/> o www.realtime.net/~welbon/initrd.md.tar.gz <http://www.realtime.net/~welbon/initrd.md.tar.gz> o luthien.nuclecu.unam.mx/~miguel/raid/ <http://luthien.nuclecu.unam.mx/~miguel/raid/> ÖWª é[OXgðȺÉñµÜ·D o majordomo@nuclecu.unam.mx <mailto:majordomo@nuclecu.unam.mx> Ö subscribe raiddevÌàeÌ[ðêÎQÁÅ«Ü·D eÍ raiddev@nuclecu.unam.mx <mailto:raiddev@nuclecu.unam.mx> Ö [ðèÜ·D o majordomo@vger.rutgers.edu <mailto:majordomo@vger.rutgers.edu>Ö subscribe linux-raidÌàeÌ[ðêÎQÁÅ«Ü·D eÍ linux-raid@vger.rutgers.edu <mailto:linux- raid@vger.rutgers.edu> Ö[ðèÜ·D (±êªÅàÈ[ OXgÌæ¤Å·) 3. [gfBNgð RAID É·éû@ÌTà VXeðµ½èC\zµ½èCfobOµ½È¢êÍC Slackware-3.4 ÉîâÄìÁ½êÊIÈVXeðȺÅüèµÄ¾³ ¢D ftp.bizsystems.com/pub/raid/raidboot-0.01.tar.gz <ftp://ftp.bizsystems.com/pub/raid/> »µÄCÌèðÀsµÜ·D o gp·éfBXNÌT|[gðgÝÝCRAID ðLøɵ½J[lð\ zµÜ· o RAID ACª³µÝèC}EgÅ«é©eXgµÜ· o RAID VXeãÉ OS ðCXg[µÜ· o [gfoCXÆµÄ /dev/md0 ðQÆ·éæ¤É fstab ÌàeðC³µ Ü·DN®ÉKvÈp[eBVª fstab ÉÜÜêÄ¢é±ÆðmFµ Ü·D o Modify your shutdown halt and reboot script(s) (mine is /etc/rc.d/rc.6) as shown in ``Modifying the rc-scripts for SHUTDOWN'' ÌLqɵ½ªÁÄC}VÌâ~yÑÄN®ÌXNv g(MÒÌVXeÅÍ /etc/rc.d/rc.6 Å·)ðC³µÜ·D o ȺÌèɦ·æ¤ÉCt@CðìÆpVXe©çCVXe ÆVµ¢ RAID VXe̼ûÉRs[µÜ·D cd /root/raidboot mkdir mnt gzip -d rescue.clean losetup /dev/loop0 rescue.clean mount /dev/loop0 mnt Ìæ¤Ét@CðRs[µÜ·D cp -p /etc/* mnt/etc cp -p /etc/rc.d/* mnt/etc/rc.d {or as appropriate for your system} cp -a /lib/modules/* mnt/lib/modules Linux ÌfBXgr [VÉæÁÄÍC[gt@CVXeÌ ro/rw Xe[^Xð²×Ü·Dinitrd VXeÌ rc N®XNvg© çÍC±êð²×éªðæèKvª èÜ·D``VXeÌC ³''ÌÍÌèðQƵľ³¢D devmd0/ ª[gfoCXfstab ÉÈéæ¤ fstab ðC³µÜ·DN®ÉK vÈp[eBVª fstab ÉÜÜêÄ¢é±ÆðmFµÜµå¤D RAID ©çN®·éÝèðLq·é /etc/raidboot.conf ð쬵ܷD±Ì t@CÌÅÌ3sÉÍRgðüêÄÍ¢¯Ü¹ñD»êÈ~ÈçÎâ è èܹñD raidboot.conf /dev/sda1 /dev/sda2 raidboot raid5.conf # comments may only be placed 'after' the three # configuration lines. # # This is 'raidboot.conf' # # line one, the partition(s) containing the 'initrd' raid-rescue system # It is not necessary to boot from these partitions, however, # since the rescue system will not fit on floppy, it is necessary # to know which partitions are to be used to load the rescue system # # line two, the path to the raidboot config information # Where the shutdown status, etc... is located at boot time # It does NOT include the mount point information, only 'path' # /mntpoint/'path' # # line -3-, name of the raid configuration file # Current raid configuration file i.e. raid1.conf, raid5.conf ã͢©ÌìÆðs¦ÎCRAID VXeÌN®õªÅ«Ü·D t^ F ÅྷéC``rc.raidown'' t@Cð # 쬵C±êðCì ÆCRAID ÌeVXeÌ /etc/rc.d fBNg # ÉRs[µÜ·D VXeðA}Egµ½ãC±êð³kµÜ·D umount mnt losetup -d /dev/loop0 mv rescue.clean rescue gzip rescue t@Cð RAID N®p[eBVÉRs[µÜ·D cp rescue.gz /mnt_point(1)/raidboot cp rescue.gz /mnt_point(2)/raidboot RAID ACðLøɵܷD mdadd -ar RAID N®p[eBVÌ ³µ¢ QÆXe[^XðÛ¶µÜ·D cat /proc/mdstat | grep md0 > /mnt_point(1)/raidboot/raidgood.ref cat /proc/mdstat | grep md0 > /mnt_point(1)/raidboot/raidgood.ref ÅãÉ ``N®ÌÝèp[^'' Ìà¾É]ÁÄN®vOðÝè µCRAID ACãÌVXeðN®µÜ·D 4. RAID ð[gƵÄ}Eg·é½ßÌ initrd Ìðà ±êÍ RAID Ìc[(rescue tools) ðÜÞ `initrd' RAMfBXNðì é½ßÌ豫ŷD {¶ÅÍÁÉ RAID1 Æ RAID5 ÌÀÉ¢Äà¾ðs¢Ü·D 4.1. ZL eBÉÖ·éÓ pÌt@CVXeÍX^hAÅgpÅ«Ü·DRAID ACÌ }Egɸsµ½êCVXeª}Eg³êÄ®ìµÜ·DÅ·© çZL eBÉÍ\ªÓµÄ¾³¢I 4.2. J[lÆ RAID c[Ì\z ÅÌìÆÍCpb`ðÄÄJ[lðÄ\z·é±ÆÆ RAID ìc[ ɵêé±ÆÅ·Dt^ E Ì ``Gadi Ì RAID â~pb`'' ðmFµCJ [lÉÜßľ³¢DÝèðsÁÄ©ç RAID foCXð}EgCeX gµÜ·DÚ×ÈèÍ raidtools pbP[WÉÜÜêĢܷªC{¶ ÅàãÅq×Ü·D 4.3. initrd ÉæéyÑN®t@CVXeÌ\z Í/N®pÌt@CVXeÆdpÌ}VÌt@CVXeð \z·éÛÉ Slackware-3.4 fBXgr [Vðg¢Üµ½DÅ· ªCÇÌ Linux fBXgr [VÅàâèÈ¢Æv¢Ü·DÙÈé fBXgr [Vðg¤êÉÍCè̤¿ Slackware ÉÁ»µ½ ªðmFµCKvɶÄC³µÄ¾³¢D MÒÍ loadlin ðgÁÄJ[lC[WÆRAMfBXNð DOS p[eB V©çN®µÄ¢Ü·ªC±êÍCPÉ DOS ÌÝè\tgEFAðg¤ ¢Á½foCXðgÁÄ¢é©çÅ·DLILO Åà¤Ü®ìµÜ· µCRAID/N®t@CÆ lilo R[h¾¯ðÜÞ¬³¢ Linux p[eB VàgpÅ«Ü·D MÒÍÅÉ Slackware Ì `setup' XNvgðgÁÄŬÀÌRAMfBX NVXeðìèCɱÌRAMfBXNãÌfÌSlackware É `linuxthreads' pbP[WÆ `raidtools' ðã«CXg[·é±ÆÉ µÜµ½DÍdpÌ}Vð\z·éÆ«ÉàS¯¶è±«ðp¢Üµ ½DÅ·©çCVXeÆdpVXeÍÙÚ¯¶\¬ÉÈÁÄ¢Ü ·D ±ÌCXg[ÉæÁÄ`Ì'VXeªÅ«Ü·(t@CÌRs[ðÛ ¶µÄ¨«Üµå¤)D±ÌVXeÖ /lib/modules/2.x.x...... /etc .... with a modified fstab, mdtab, raidX.conf, raidboot.conf /etc/rc.d /dev/md* ð»ÝgÁÄ¢éVXe©çã«Rs[µC»Ý é¢Í±ê©ç®ì³ ¹æ¤ÆµÄ¢éVXeÉí¹ÄJX^}CYµÜ·D ±êÉæèCN®/VXeð»Ý®ìµÄ¢é RAID foCXð[g É}Egµ½VXeƯ¶ÉÅ«Ü·DCuÌo[WÍíÉ ÅVÉÅ«Ü·ªCµ¬³¢VXeÉÈèÜ·D 4.4. XebvEoCEXebvÌè [U root Ìz[fBNg(/root)ÅȺÌR}hðÀsµÜ·: cd /root mkdir raidboot cd raidboot }Eg|Cgð쬵ܷD mkdir mnt mkdir mnt2 t@CVXeðCXg[·éÌÉ\ªÈ嫳Ìt@CðìèÜ ·D±êÍÅIIÈt@CVXeæè¸ÁÆå«ÈèÜ·D16K oCgÅÍ\ªÅÍÈ©Á½ÌÅCÍ24KoCgg¤±Æɵܵ½D dd if=/dev/zero of=build bs=1024k count=24 t@Cð loop foCXƵCext2 t@CVXeð±Ìt@CãÉ ì¬µÜ·D losetup /dev/loop0 build mke2fs -v -m0 -L initrd /dev/loop0 mount /dev/loop0 mnt 4.5. fBXgr [VÌCXg[ (Slackware ÌêÌÝ) Slackware ɵ©ÊpµÈ¢bèÈÌÅCSlackware ÈOÌfBXgr [ Vðg¤êÉÍ``ÌÍÉiñÅ''¾³¢D »ÝÍóÌt@CVXeªìçêÄ}Eg³êÄ¢éóÔÅ·D±± Å"setup"ðÀsµÜ·D /root/raidboot/mnt ðwèµÜ·D`source'ÉÍÊíÌCXg[³ðKXwèµÜ·DpbP [WIðÍ©RÉsÁĩܢܹñªC`configure' ÍsíȢž³ ¢D vvgÌ[hƵÄÍ `EXPERT' ðIðµÜ·D ÍVXeÌŬ\¬Ì `A', `AP', `N' ÉÁ¦Cg¢µêÄ¢ÄTCYà ¬³¢GfB^(vi, jed, joe)ðIðµÜµ½D lqqqqqqqq SELECTING PACKAGES FROM SERIES A (BASE LINUX SYSTEM) qqqqqqqqk x lqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqk x x x [X] aaa_base Basic filesystem, shell, and utils - REQUIRED x x x x [X] bash GNU bash-1.14.7 shell - REQUIRED x x x x [X] devs Device files found in /dev - REQUIRED x x x x [X] etc System config files & utilities - REQUIRED x x x x [X] shadow Shadow password suite - REQUIRED x x x x [ ] ide Linux 2.0.30 no SCSI (YOU NEED 1 KERNEL) x x x x [ ] scsi Linux 2.0.30 with SCSI (YOU NEED 1 KERNEL) x x x x [ ] modules Modular Linux device drivers x x x x [ ] scsimods Loadable SCSI device drivers x x x x [X] hdsetup Slackware setup scripts - REQUIRED x x x x [ ] lilo Boots Linux (not UMSDOS), DOS, OS/2, etc. x x x x [ ] bsdlpr BSD lpr - printer spooling system x x x x [ ] loadlin Boots Linux (UMSDOS too!) from MS-DOS x x x x [ ] pnp Plug'n'Play configuration tool x x x x [ ] umsprogs Utilities needed to use the UMSDOS filesystem x x x x [X] sysvinit System V-like INIT programs - REQUIRED x x x x [X] bin GNU fileutils 3.12, elvis, etc. - REQUIRED x x x x [X] ldso Dynamic linker/loader - REQUIRED x x x x [ ] ibcs2 Runs SCO/SysVr4 binaries x x x x [X] less A text pager utility - REQUIRED x x x x [ ] pcmcia PCMCIA card services support x x x x [ ] getty Getty_ps 2.0.7e - OPTIONAL x x x x [X] gzip The GNU zip compression - REQUIRED x x x x [X] ps Displays process info - REQUIRED x x x x [X] aoutlibs a.out shared libs - RECOMMENDED x x x x [X] elflibs The ELF shared C libraries - REQUIRED x x x x [X] util Util-linux utilities - REQUIRED x x x x [ ] minicom Serial transfer and modem comm package x x x x [ ] cpio The GNU cpio backup/archiving utility x x x x [X] e2fsbn Utilities for the ext2 file system x x x x [X] find GNU findutils 4.1 x x x x [X] grep GNU grep 2.0 x x x x [ ] kbd Change keyboard mappings x x x x [X] gpm Cut and paste text with your mouse x x x x [X] sh_utils GNU sh-utils 1.16 - REQUIRED x x x x [X] sysklogd Logs system and kernel messages x x x x [X] tar GNU tar 1.12 - REQUIRED x x x x [ ] tcsh Extended C shell version 6.07 x x x x [X] txtutils GNU textutils-1.22 - REQUIRED x x x x [ ] zoneinfo Configures your time zone x x x mqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqj x `AP' V[Y©çÍÌD«ÈGfB^ `JOE' ÆRpNgÅÖÈt@C ìc[Å é `MC' ¾¯ðIðµÜµ½D±±ÍKvɶÄ[eB eBðIðµÄ¾³¢D lqqqqqqqqq SELECTING PACKAGES FROM SERIES AP (APPLICATIONS) qqqqqqqqqk x x [ ] ispell The International version of ispell x x x x [ ] jove Jonathan's Own Version of Emacs text editor x x x x [ ] manpgs More man pages (online documentation) x x x x [ ] diff GNU diffutils x x x x [ ] sudo Allow special users limited root access x x x x [ ] ghostscr GNU Ghostscript version 3.33 x x x x [ ] gsfonts1 Ghostscript fonts (part one) x x x x [ ] gsfonts2 Ghostscript fonts (part two) x x x x [ ] gsfonts3 Ghostscript fonts (part three) x x x x [ ] jed JED programmer's editor x x x x [X] joe joe text editor, version 2.8 x x x x [ ] jpeg JPEG image compression utilities x x x x [ ] bc GNU bc - arbitrary precision math language x x x x [ ] workbone a text-based audio CD player x x x x [X] mc The Midnight Commander file manager x x x x [ ] mt_st mt ported from BSD - controls tape drive x x x x [ ] groff GNU troff document formatting system x x x x [ ] quota User disk quota utilities x x x x [ ] sc The 'sc' spreadsheet x x x x [ ] texinfo GNU texinfo documentation system x x x x [ ] vim Improved vi clone x x x x [ ] ash A small /bin/sh type shell - 62K x x x x [ ] zsh Zsh - a custom *nix shell x x x mqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqj x `N' pbP[W©çÍ TCP/IP ¾¯ðüêܵ½D±êÍK¸µàKvÅÍ èܹñªCñíÉÖÅ·µC[gÉ RAID ACª}Eg³êÄ¢È ¢óÔÅâXVÌìÆðs¤ÛÉlbg[NÉANZXÅ«éæ¤ÉÈ èÜ·DTCP/IP ÉÍ `A' ÉÜÜêéAvP[V̢©ªgp·é `biff' àÜñŢܷD`N' ðCXg[µÈ©Á½ÆµÄàCbiff pb P[WÍüê½ÈéÆv¢Ü·D lqqqq SELECTING PACKAGES FROM SERIES N (NETWORK/NEWS/MAIL/UUCP) qqqqqk x lqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqk x x x [ ] apache Apache WWW (HTTP) server x x x x [ ] procmail Mail delivery/filtering utility x x x x [ ] dip Handles SLIP/CSLIP connections x x x x [ ] ppp Point-to-point protocol x x x x [ ] mailx The mailx mailer x x x x [X] tcpip TCP/IP networking programs x x x x [ ] bind Berkeley Internet Name Domain server x x x x [ ] rdist Remote file distribution utility x x x x [ ] lynx Text-based World Wide Web browser x x x x [ ] uucp Taylor UUCP 1.06.1 with HDB && Taylor configs x x x x [ ] elm Menu-driven user mail program x x x x [ ] pine Pine menu-driven mail program x x x x [ ] sendmail The sendmail mail transport agent x x x x [ ] metamail Metamail multimedia mail extensions x x x x [ ] smailcfg Extra configuration files for sendmail x x x x [ ] cnews Spools and transmits Usenet news x x x x [ ] inn InterNetNews news transport system x x x x [ ] tin The 'tin' news reader (local or NNTP) x x x x [ ] trn 'trn' for /var/spool/news x x x x [ ] trn-nntp 'trn' for NNTP (install 1 'trn' maximum) x x x x [ ] nn-spool 'nn' for /var/spool/news x x x x [ ] nn-nntp 'nn' for NNTP (install 1 'nn' maximum) x x x x [ ] netpipes Network pipe utilities x x x mqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqj x CXg[ªI¹µ½çC»êÈOÌÚÉÍSÄ `no' Ʀ(SÄÌÝ èÚÉ `no' Ʀé)CXNvgðI¹µÜ·D 4.6. Linux pthreads ÌCXg[ É`linuxthreads-0.71' CuðCXg[µÈ¯êÎÈèܹñD ±±ÅÍèìÆÉæéCXg[ðڵྷéãíèÉClinuxthreads Ì Makefile Éη鷪pb`ð¦µÜ·D³Ì Makefile ðÛ¶µÄ©ç diff R}hÅpb`ðÄC»µÄ make ðs¢Ü·D cd /usr/src/linuxthreads-0.71 patch make make install -------------------diff Makefile.old Makefile.raid----------------- 2a3,13 > # If you are building "linuxthreads" for installation on a mount > # point which is not the "root" partition, redefine 'BUILDIR' to > # the mount point to use as the "root" directory > # You may wish to do this if you are building an 'initial ram disk' > # such as used with bootable root raid devices. > # REQUIRES ldconfig version 1.9.5 or better > # do ldconfig -v to check > # > BUILDIR=/root/raidboot/mnt > #BUILDIR= > 81,82c92,93 < install pthread.h $(INCLUDEDIR)/pthread.h < install semaphore.h $(INCLUDEDIR)/semaphore.h --- > install pthread.h $(BUILDIR)$(INCLUDEDIR)/pthread.h > install semaphore.h $(BUILDIR)$(INCLUDEDIR)/semaphore.h 84c95 < test -f /usr/include/sched.h || install sched.h $(INCLUDEDIR)/sched.h --- > test -f $(BUILDIR)/usr/include/sched.h || install sched.h $(BUILDIR)$(INCLUDEDIR)/sched.h 86,89c97,103 < install $(LIB) $(LIBDIR)/$(LIB) < install $(SHLIB) $(SHAREDLIBDIR)/$(SHLIB) < rm -f $(LIBDIR)/$(SHLIB0) < ln -s $(SHAREDLIBDIR)/$(SHLIB) $(LIBDIR)/$(SHLIB0) --- > install $(LIB) $(BUILDIR)$(LIBDIR)/$(LIB) > install $(SHLIB) $(BUILDIR)$(SHAREDLIBDIR)/$(SHLIB) > rm -f $(BUILDIR)$(LIBDIR)/$(SHLIB0) > ln -s $(SHAREDLIBDIR)/$(SHLIB) $(BUILDIR)$(LIBDIR)/$(SHLIB0) > ifneq ($(BUILDIR),) > ldconfig -r ${BUILDIR} -n $(SHAREDLIBDIR) > else 91c105,106 < cd man; $(MAKE) MANDIR=$(MANDIR) install --- > endif > cd man; $(MAKE) MANDIR=$(BUILDIR)$(MANDIR) install 4.7. RAID c[ÌCXg[ CXg[ÌÌXebvÍCRAID c[ raidtools-0.42 ÌCXg[ Å·D RAMfBXNÌt@Cð\z·éfBNgð Makefile ɳ¦é½ßÉ "configure" XNvgðÀsµÜ·D cd /usr/src/raidtools-0.42 configure --sbindir=/root/raidboot/mnt/sbin --prefix=/root/raidboot/mnt/usr make make install ±±Åӷ׫_ª èÜ·DCXg[Ég¤ Makefile ͳµÈ¢ ÌÅC±êð¼·½ßÉÌìÆðs¢Ü·D±êÍ«Ì[XÅÍC³ ³êCÄNÍKv³Èé\èÅ·D CXg[G[ÌC³ ³µì·é½ßÉÍ Makefile Ì `LINKS' Åwè³êÄ¢ét@CÌ NðíµC£è¼³È¯êÎÈèܹñD cd /root/raidboot/mnt/sbin ln -fs mdadd mdrun ln -fs mdadd mdstop 4.8. Vµ¢t@CVXe©çÌsvÈfBNgÆt@CÌí ȺÌfBNgÆt@Cðt@CVXe©çíµÜ·D (Ó: ëÁÄ»ÝÒÌVXeÌt@CðÁ³È¢æ¤ÉD) ±ÌXgð© Ät@CðÁ·¾¯ÈçÈPÅ·ªCª±ÌXgðǤâÁÄìÁ½Ì ©àl¦Ä¾³¢I cd /root/raidboot/mnt rm -r home/ftp/* rm -r lost+found rm -r usr/doc rm -r usr/info rm -r usr/local/man rm -r usr/man rm -r usr/openwin rm -r usr/share/locale rm -r usr/X* rm -r var/man rm -r var/log/packages rm -r var/log/setup rm -r var/log/disk_contents 4.9. /dev/md x Ìì¬ ÅãÌXebvÍC»ÝÌt@CVXe©çt@CVXeÉ /dev/md* foCXð½¾Rs[·é±ÆÅ·D±êÍ mknod Åàs¤±Æª Å«éŵå¤D cp -a /dev/md* /root/raidboot/mnt/dev 4.10. initrd ̽ßÌÌt@CVXeì¬ ±êÅJX^}CYÅ«CÄpàÂ\ÈÜÁ³çÈt@CVXeªÅ« ܵ½DêxJX^}CY·éÆCfBXNÉg¤±ÆªÅ«é±Ìt@ CVXeÍóêĵܢCC³·é½ßÉÍRAIDc[ªKvÆÈèÜ ·D±êÍÌÍÅྷé linuxrc t@CðÇÁ·é±ÆÉæÁÄCu [gµÄ[gÉ}Eg·é RAID foCXÉg¤±ÆàÅ«Ü·D initrd t@C̽ßɬ³¢foCXÖVXeðRs[µÜ·D16K oCgà êÎ\ªÅµå¤D ¬³¢t@CVXeðìèC±êð}EgµÜ·D cd /root/raidboot dd if=/dev/zero of=bare.fs bs=1024k count=16 t@Cð loop foCXƵC±Ìt@CãÉ ext2 t@CVXe\ zµÜ·D losetup /dev/loop1 bare.fs mke2fs -v -m0 -L initrd /dev/loop1 mount /dev/loop1 mnt2 `build't@CVXeð`bare.fs'ÉRs[µÜ·D cp -a mnt/* mnt2 ãÌXVðeÕÉ·é½ßCJX^}CYÌOÉ `bare.fs' VXeðÛ¶ µÜ·D`build' t@CVXeÍà¤Kv èܹñÌÅCÁµÄà\¢ ܹñD cd /root/raidboot umount mnt umount mnt2 losetup -d /dev/loop0 losetup -d /dev/loop1 rm build cp bare.fs rescue gzip -9 bare.fs 4.10.1. N®/pÌ initrd t@CVXeÌì¬ ÉCìÆpÌ}V©çJ[lÉK·éVXe˶Ìt@CðRs [·é©C^[QbgÌVXeÉK·éæ¤Ét@CVXeÌ t@CðèÅC³·é©µÜ·D losetup /dev/loop0 rescue mount /dev/loop0 mnt etc fBNgÉ *~ t@CâCcore, Ot@Cª³¢±ÆðmFµ Ü·DÌ2ÂÌR}h͢©EH[jOðoµÜ·ªC³µÄ ¾³¢D cp -dp /etc/* mnt/etc cp -dp /etc/rc.d/* mnt/etc/rc.d mkdir mnt/lib/modules cp -a /lib/modules/2.x.x mnt/lib/modules <--- your current 2.x.x 4.10.2. VXeÌC³ VXeÌȺÌt@CðC³µÜ·D±±Å°ét@CÌÉÍ Slackware ÁLÌàÌà èÜ·ªC¼ÌfBXgr [VÅà¯Ì à̪ é͸ŷD cd mnt lbg[NÖWÅÈ¢àÌ etc/fstab etc/mdtab »ÌÜÜÅåävÅµå¤ lbg[NÖW etc/hosts etc/resolv.conf etc/hosts.equiv yÑÖAt@C etc/rc.d/rc.inet1 IPAhXClbg}XNCQCgEFCÌÝèðC³µÜ· etc/rc.d/rc.S t@CVXeÌXe[^XÖW̪ðSÄíµÜ· # Test to see if the root partition is read-only ̪©ç # remove /etc/mtab* so that mount will ..... ðÜÜÈ¢ªÜÅðíµÜ·D ±êÍ RAMfBXNªÇÝ«Â\Å}E g³êéÆoé¤é³¢EH[jOðo È¢æ¤ÉµÜ·D etc/rc.d/rc.xxxxx KvÈçμÌt@CàD{¶ÅãqµÜ· root/.rhosts ൶ݷêÎ home/xxxx/xxxx KvÈçμÌt@Cà x: ±ÌìÆÅ passwd Æ shadow Ìt@CÍVXeÉ Rs[³êĵܢܷI±êÍZL eBãÌRÅD ܵȢêà éŵå¤D KvÉ¶Ä /dev/disk ð}Eg·é½ßÌfBNgðìèÜ·D± êÍVXeÅêÓÉÜçȯêÎÈèܹñD±êçÍVXeðN®· é½ßÌ}Eg|Cg(N®p[eBVÆN®p[eBVÌob NAbv)ÉÈèÜ·DMÒÌVXeÍ loadlin ðpµÄ DOS ©çN® ·éæ¤ÉÈÁĢܷªCLinux p[eBVâ LILO Åà¤Ü®ìµ Ü·DMÒÌVXeÅÍȺÌæ¤ÉÈÁĢܷD cd /root/raidboot/mnt <-- initrd Ì[g mkdir dosa DOS p[eBVÌ}Eg|Cg mkdir dosb DOS Ì~[Ì}Eg|Cg t@CVXeͱêÅoãªèÅ·I t@CVXeÌt@Cð²×êÎCܾ½Ìt@CðÁ¹é± ƪª©éÆv¢Ü·D±ÌìÆÍ¡G·¬é±ÆÆCÙÆñÇÌ RAID VX eÉÍ\ªÈfBXNƪ é±Æ©çCͱêðsÁÄܹ͢ ñDt@CVXeðàÁÆX}[gɵ½¯êÎC²©ªÅâÁľ³ ¢I 4.11. `initrd' Å RAID foCX©çN®³¹é - linuxrc fBXNÅ RAID foCXðN®·éÉÍC½¾ÌXNvgt@C linuxrc ðfoCXÌ[gÉRs[·é¾¯Å·D ±Ì linuxrc t@CÌ®ìÉ¢ÄÌbÍ ``t^ G, linuxrc Ì®ìÉ ¢Ä''Åc_µÜ·D àÁÆÈPÅðµâ·¢(®ìà·é) linuxrc Í ``t^ D'' É èÜ· ªC±êÍâ linuxrc Æâ~XNvgÅ·DȺ̪ð linuxrcƵ ÄìÆfBNgÉRs[µÄ¨«Üµå¤D -------------------- linuxrc ---------------------- #!/bin/sh # ver 1.13 3-6-98 # ################# BEGIN 'linuxrc' ################## # DEFINE FUNCTIONS # #################################################### # Define 'Fault' function in the event something # goes wrong during the execution of 'linuxrc' # FaultExit () { # correct fstab to show '/dev/ram0' for rescue system /bin/cat /etc/fstab | { while read Line do if [ -z "$( echo ${Line} | /usr/bin/grep md0 )" ]; then echo ${Line} else echo "/dev/ram0 / ext2 defaults 1 1" fi done } > /etc/tmp.$$ /bin/mv /etc/tmp.$$ /etc/fstab # point root at /dev/ram0 (the rescue system) echo 0x100>/proc/sys/kernel/real-root-dev /bin/umount /proc exit } # Define 'Warning' procdure to print banner on boot terminal # Warning () { echo '*********************************' echo -e " $*" echo '*********************************' } # Define 'SplitKernelArg' to help extract 'Raid' related kernel arguments SplitKernelArg () { eval $1='$( IFS=,; echo $2)' } #Define 'SplitConfArgs' to help extract system configuration arguments SplitConfArgs () { RaidBootType=$1 RaidBootDevice=$2 RaidConfigPath=$3 } ######################################################## ################### MAIN linuxrc ####################### ######################################################## # mount the proc file system /bin/mount /proc # Get the boot partition and configuration location from command line CMDLINE=`/bin/cat /proc/cmdline` for Parameter in $CMDLINE; do Parameter=$( IFS='='; echo ${Parameter} ) case $Parameter in Raid*) SplitKernelArg $Parameter;; esac done # check for 'required raid boot' if [ -z "${Raid_Conf}" ]; then Warning Kernel command line \'Raid_Conf\' missing FaultExit fi SplitConfArgs $Raid_Conf # tmp mount the boot partition /bin/mount -t ${RaidBootType} ${RaidBootDevice} /mnt # get etc files from primary raid system pushd /etc # this will un-tar into 'etc' (see rc.6) if [ ! -f /mnt/${RaidConfigPath}/raidboot.etc ]; then # bad news, this file should be here Warning required file \'raidboot.etc\' \ missing from ${RaidBootDevice}/${RaidConfigPath} \\n \ \\tUsing rescue system defaults else /bin/tar -xf /mnt/${RaidConfigPath}/raidboot.etc fi # get 'real' raidboot device for this boot # status path, and name of raidX.conf if [ ! -f /mnt/${RaidConfigPath}/raidboot.cfg ]; then # bad news, this file should be here Warning required file 'raidboot.cfg' \ missing from ${RaidBootDevice}/${RaidConfigPath}\\n \ \\tUsing rescue system defaults # Get the first raidX.conf file name in $RArg1 RaidBootDevs=$RaidBootDevice RaidStatusPath=$RaidConfigPath for RaidConfigEtc in $( ls raid*.conf ) do break; done else { read RaidBootDevs read RaidStatusPath read RaidConfigEtc } < /mnt/${RaidConfigPath}/raidboot.cfg fi popd /bin/umount /mnt # Set a flag in case the raid status file is not found # RAIDOWN="raidboot.ro not found" RAIDREF="raidgood.ref not found" echo "Reading md0 shutdown status." # search for raid shutdown status for Device in ${RaidBootDevs} do # these filesystem types should be in 'fstab' since # the partitions must be mounted for a clean raid shutdown /bin/mount ${Device} /mnt if [ -f /mnt/${RaidStatusPath}/raidboot.ro ]; then RAIDOWN=`/bin/cat /mnt/${RaidStatusPath}/raidboot.ro` RAIDREF=`/bin/cat /mnt/${RaidStatusPath}/raidgood.ref` /bin/umount /mnt break fi /bin/umount /mnt done # Test for a clean shutdown with array matching reference if [ "${RAIDOWN}" != "${RAIDREF}" ]; then Warning shutdown ERROR ${RAIDOWN} FaultExit fi # The raid array is clean, remove shutdown status files for Device in ${RaidBootDevs} do /bin/mount ${Device} /mnt /bin/rm -f /mnt/${RaidStatusPath}/raidboot.ro /bin/umount /mnt done # Write a clean superblock on all raid devices echo "write clean superblocks" /sbin/mkraid -f --only-superblock /etc/${RaidConfigEtc} # Activate raid array(s) if [ -z "$Raid_ALT" ]; then /sbin/mdadd -ar else /sbin/mdadd $Raid_ALT fi # If there are errors - BAIL OUT and leave rescue running if [ $? -ne 0 ]; then Warning some RAID device has errors FaultExit fi # Everything is fine, let the kernel mount /dev/md0 # tell the kernel to switch to /dev/md0 as the /root device # The 0x900 value is the device number calculated by: # 256*major_device_number + minor_device number echo "/dev/md0 mounted on root" echo 0x900>/proc/sys/kernel/real-root-dev # umount /proc to deallocate initrd device ram space /bin/umount /proc exit #------------------ end linuxrc ---------------------- `linuxrc' ð initrd ÌN®foCXÉÇÁµÜ·D cd /root/raidboot chmod 777 linuxrc cp -p linuxrc mnt 4.12. Vbg_EpÌ rc XNvgÌC³ CXg[ÌÅãÌèÍCVbg_EÉ md ÌóÔð{Ì[g foCXÉÛ¶·é³¹éæ¤É rc XNvgðC³·é±ÆÅ·D Slackware ÌêÍCrc.0 ©ç rc.6 Å·DDebian `bo' ÌêÍC±êÍ `halt' yÑ `reboot' ÉÈèÜ·D ൱êÈOÌfBXgr [VÅÀsµ½êÍC±Ì¶ÉÇÁ· é½ßCèÆTvt@CðMÒÉ[ÅÁľ³¢D ÍRAID â~Ìâèñð̽ßÌ Bohumil Chalupa ³ñÌû@ðµÏ Xµ½àÌðgÁĢܷDÞ̦µ½³Ìû@Í ``t^A''Åq×Ü·D ÌdpVXeÉÍ md0 ÈOÌ Linux p[eBVÍcÁÄ¢È¢Ì ÅCraidOK readonly ÌXe[^XðÛ¶·é½ßÉN®p[eBVð gÁĢܷDMÒÍVbg_EÉ md ACÌXe[^XðÜÞN® p[eBVƻ̡»Ì¼ûÖt@Cð«ÝCmd foCXª[ hI[ÅÄ}Eg³ê½±ÆðL^·é±Æɵܵ½D±êÍn[h fBXNÌÇꩪóê½Æ«ÌáQÎôÆÈèÜ·D Vbg_EXNvgÍC³³êC``rc.raidown'' Æ¢¤¼OÉÈèÜ ·D±êÍC³µÄN®µÄC RAID foCXð}Eg·é½ßÉKvÈ îñðÛ¶·é½ßÌàÌÅ·DefBXgr [VpÌVbg_E XNvgÌáÍ ``t^ B''ÅÐîµÜ·D RAID ACÌVbg_EÌÌXe[^Xð¾é½ßÉCSÄÌ case ¶(ൠêÎ)ÌãÅC©ÂCÀÛÌVbg_E(kill, óÔÛ¶)Æ t@CVXeÌA}EgÌO̪ɨ¢Ä ``rc.raidown''ðÄÑ oµÜ·D ############ Save raid boot and status info ############## # if [ -x /etc/rc.d/rc.raidown ]; then /etc/rc.d/rc.raidown fi ################## end raid boot ######################### SÄÌt@CVXeªA}Eg³ê½ã([gt@CVXeÍ A}Egu³êܹñv)©ÂCd¹fÌXe[^X`FbNÌOÉÌ R}hðüêÜ·D ################ for raid arrays ######################### # Stop all known raid arrays (except root which won't stop) if [ -x /sbin/mdstop ]; then echo "Stopping raid" /sbin/mdstop -a fi ########################################################## ±êÉæè[gÈOÌSÄÌ RAID foCXðÀSÉâ~³¹é±ÆªÅ« Ü·D[gÌXe[^XÍ raidstat.ro ÉL^³êCñÌN®ÉQÆ ³êÜ·D rc t@CðVµ¢ RAID ACCܾ /root/raidboot/mnt É}Eg³ êÄ¢ét@CVXeC(൯¶}VÈçÎ) ìÆpVXeÌ »ê¼êÉRs[µÜ·D KvɶÄt@CVXeÌetc/fstabÌC³ÆCt@CVX eÌ mdtab ª³µ¢©Ç¤©Ì`FbNðs¢Ü·D ³ÄCfBXNð DOS p[eBVÉRs[·êÎCRAID foCXð [gt@CVXeƵÄVXeðN®·éõÍIíèÅ·D umount mnt losetup -d /dev/loop0 gzip -9 rescue N®p[eBVÉ rescue.gz ðRs[µÜ·D céìÆÍCÝèt@C raidboot.conf ðìèCVXeðÄN®µÄV µ¢t@CVXeðeXg·é±Æ¾¯Å·D 4.13. Configuring RAIDBOOT - raidboot.conf ÝèáÌãÌRgÍCÝèt@CÌÅÌ3sÌ»ê¼êÉ¢ÄÌà ¾Å·DáÍ 4 hCuÌ SCSI RAID5 ACÅCN®p[eBVð sda1 Æ sdb1 hCuÉ¡»µÄ¢éêÌàÌÅ·DÀÛÉgp·éê ÉÍC±ÌãíèÉt@CVXeɶ½p[^ðÝèµÄ¾³ ¢D /dev/sda1 /dev/sdb1 linux raid5.conf # RgÍ3ÂÌÝèsÌuãvÉÌÝLq·é±ÆªÅ«Ü·D # # ±Ìt@CÍ 'raidboot.conf' Å·D # # 1sÚ, 'initrd' RAID-VXeÌ ép[eBV # ±êçÌp[eBV©çN®·éKvÍ èܹñªCVX # eÍtbs[fBXNÉÍüçȢŵ天çCVXe # ðÇÌp[eBV©ç[h·éÌ©í©çȯêÎÈèܹñD # # 2sÚ, raidboot ÌÝèîñÖÌpX # Vbg_EÌXe[^XªN®ÉÇ±É éÌ©¦µÜ·D # ±êÍ}Eg|CgÌîñÍÜܸC'pX' # /}Eg|Cg/'pX'ÌÝðÜÝÜ·D # # 3sÚ, RAID Ýèt@CÌt@C¼ # »ÝÌ RAID Ýèt@CÅ·©çCÂÜè raid1.conf, # raid5.conf ÉÈèÜ·D 4.14. CRAID VXeÌ 'loadlin Æ LILO' ÌJ[lp[^w è ÆRAIDÌ2ÂÌJ[lp[^ª èÜ·ªCwè·éKvª éÌ ÍOÒÌÝÅ·D o Raid_Conf=msdos,/dev/sda1,raidboot ±Ìp[^Í RAID N®foCXÆÝèt@CðwèµÜ ·Dtbs[fBXNÌVXeðN®·éêÉÍCJ[ lÌR}hCC loadlin é¢Í LILO ÌN®t@C ɱÌLqðµÜ·D ®: 't@CVXeÌíÞ,foCX,}Eg|Cg©ç Ýèt@CÖÌpX' o Raid_ALT=-r,-p5,/dev/md0,/dev/sda3 /dev/sdb3 /dev/sdc3 /dev/sdd3 mdadd Ìp[^ÌãíèÉÈèÜ·Dç·ÅÈ¢ RAID AC ©çN®·éÆ«ÉKvÆÈèÜ·Dmdadd ÌR}hCp [^ðR}æØèÅLqµÜ·Dj¹µ½/ñç·ACð® ©·Kvª éÆ«ÈOÉÍCRgAEg·é©'k¶ ñ'ðwèµÜ·D ·Èí¿ Raid_ALT= ðwèµÜ·D ¢¸êÌp[^à LILO â loadlin ÌN®p[^t@C©C loadlin ÌJ[lR}hCÅwèÅ«Ü·Dµ©µCR}hC Åwè·éêÉÍCsÌÅåÌ·³(128¶)ðz¦È¢æ¤É ¾³¢D LILO ÅN®·éêÉÍCLILO ÌÝèt@CÖÌLqÍÌæ¤ÉÈèÜ ·D append="Raid_Conf=msdos,/dev/sda1,raidboot" append="Raid_ALT=-r,-p5,/dev/md0,/dev/sda3 /dev/sdb3 /dev/sdc3 /dev/sdd3" æèÚµÍman lilo.confðQƵľ³¢D MÒÍ DOS ÌÝè[eBeBðKvÆ·én[hEFAðÁÄ¢éÌ ÅCVXeɬ³È DOS p[eBVðìÁĢܷDµ½ªÁÄCÎ ÉÈéfBXNãÉ~[(Rs[)ð RAID5 VXeðN®·éÌÉ loadlin ðgÁĢܷD¯¶û@ð RAID1 VXeÅàgÁĢܷDÈ ºÌáÅÍ loadlin ðgÁĢܷªCâèûÍ LILO ÆæĢܷD KvÉ¶Ä loadlin ÌN®p[^ðÒWµ½èCeXgÉXbv fBXNãÅ Linux VXeðN®Å«éæ¤ÉCDOS É[gðÂVX eÉͬ³¢GfB^ðüêĢܷD DOS VXeÉÍ Linux ̽ßÉȺÌæ¤Èt@CðÁĢܷD c:\raidboot.bat c:\raidboot\loadlin.exe c:\raidboot\zimage c:\raidboot\rescue.gz c:\raidboot\raidboot.cfg c:\raidboot\raidboot.etc c:\raidboot\raidgood.ref c:\raidboot\raidstat.ro (only at shutdown) ---------------------- linux.bat --------------------------- echo "Start the LOADLIN process:" c:\raidboot\loadlin @c:\raidboot\boot.par -------------------- end linux.bat ------------------------- boot.par ÌàeÍȺŷD # loadlin boot parameter file # # version 1.02 3-6-98 # linux kernel image c:\linux\zimage # target root device root=/dev/md0 #root=/dev/ram0 #root=/dev/sdc5 # mount root device as 'ro' ro # size of ram disk ramdisk_size=16384 # initrd file name initrd=c:\raidboot\rescue.gz #noinitrd # memory ends here mem=131072k # points to raid boot device, configuration file # for floppy rescue boot, you may want to specify # this on the command line instead of here # format 'filesystem-type,device,path-to-config-frm_mntpnt' Raid_Conf=msdos,/dev/sda1,raidboot # Alternate mdadd parameters # necessary when boot with non-redundant raid # otherwise, COMMENT OUT OR SPECIFY 'NULL' #Raid_ALT=-r,-p5,/dev/md0,/dev/sda3 /dev/sdb3 /dev/sdc3 /dev/sdd3 # ethernet devices ether=10,0x300,eth0 ***** >> Ó!! VXeÌN®ÆCRAID foCXÌ}EgÌêÅ ÍCloadlin Ìp[^ª root=/dev/ram0 for the rescue system root=/dev/md0 for RAID Ìæ¤ÉÙÈ龯ŷDroot=/dev/ram0 ðwè·éÆCRAID foCXÍ}Eg³ê¸CK¸VXeªN®³êÜ·D RAID ACÌF¯É¸s·éÆCVXeÍ}Eg³êC®ìµÜ ·D 5. MÒÌdp RAID VXeÌÝè 5.1. VXeÌdl ¯¶}U[{[hªüÁÄ¢é2ÂÌVXeÌÝèð ȺɦµÜ·D Raid-1 Raid-5 }U[{[h: Iwill P55TU IDE * 2 Adaptec SCSI vZbT: Intel P200 fBXN: 7G * 2 Segate 4.2G * 4 Maxtors Wide SCSI fBXNhCuÍ RAID5 Ì}VÅÍ 'sda' ©ç 'sdd' ÆF¯³êC RAID1 ÌVXeÅÍ 'hda', 'hdc' ÆF¯³êĢܷD 5.2. n[hfBXNÌp[eBVª ÄN®Ì ckraid Ìâèª é½ßC[gÉ}EgÂ\È RAID AC ðeXg·é±ÆÍåÏÈÌÅCMÒÍXbvp[eBVðØè¼µC eXgp̬³¢ RAID p[eBV(sda6,sdb6,sdc6,sdd6)ð±±Éì èC¬³¢[gp[eBVÆ /usr/src p[eBVÌgð RAID p J[lÆc[ÌìÆpÆeXgpÉ»ê¼êìèܵ½D±êÍÖÈû @¾Æv¢Ü·D <bf/ìÆpVXe - RAID5/ foCX VXe TCY ÚI /dev/sda1 DOS N® 16M N®p[eBV * /dev/sda2 extended 130M (à¾QÆ) /dev/sda3 linux native 4G vC} RAID5-1 ----------------------sda2------------------------------ * /dev/sda5 linux swap 113M Xbv * /dev/sda6 linux native 16M eXg RAID5-1 ======================================================== /dev/sdb1 dos boot 16M N®p[eBV¡» * /dev/sdb2 extended 130M (à¾QÆ) /dev/sdb3 linux native 4G vC} RAID5-2 ----------------------sdb2------------------------------ * /dev/sdb5 linux swap 113M Xbv * /dev/sdb6 linux native 16M eXg RAID5-2 ======================================================== * /dev/sdc2 extended 146M (à¾QÆ) /dev/sdc3 linux native 4G vC} RAID5-3 ----------------------sdc2------------------------------ * /dev/sdc5 linux swap 130M ìÆp[gp[eBV * /dev/sdc6 linux native 16M eXg RAID5-3 ======================================================== * /dev/sdd2 extended 146M (à¾QÆ) /dev/sdd3 linux native 4G vC} RAID5-4 ----------------------sdd2------------------------------ * /dev/sdd5 linux swap 130M ìÆp /usr/src * /dev/sdd6 linux native 16M eXg RAID-4 <bf/ìÆpVXe - RAID1/ foCX VXe TCY ÚI /dev/hda1 DOS 16M N®p[eBV * /dev/hda2 extended 126M (à¾QÆ) /dev/hda3 linux 126M ìÆp[gp[eBV /dev/hda4 linux 6+G RAID1-1 ----------------------hda2------------------------------ * /dev/hda5 linux 26M eXg RAID1-1 * /dev/hda6 linux swap 100M ======================================================== /dev/hdc1 hda1 ÌPÈéRs[Dµ½ªÁÄChda ªÌá µ½êÉÍANeBuÉ·é±ÆªÅ«é * /dev/hdc2 extended 126M (à¾QÆ) /dev/hdc3 linux 126M ìÆp /usr/src /dev/hdc4 linux 6+G RAID1-2 ----------------------hdc2------------------------------ * /dev/hdc5 linux 26M eXg RAID1-2 * /dev/hdc6 linux swap 100M sdx2 Æ hdx3 p[eBVÍC[eBeBÌJªIíÁ½ãÉÍC ½ÌÅ·ªC¼Ì Linux }VÌCuâJ[lª1NÈãâàÌ ¾Á½ÌÅC^[Qbg}VÅìé±Æɵܵ½D p[eBVÌØèûÍCfBXNÌÇꩪóêĵÜÁ½êÉàCV XeªÅ«é¾¯ÈPÉN®µ±¯éæ¤ÉÅ«Cf[^à¸íÈ¢æ¤É ßܵ½D o 1ÂÌn[hfBXNªóê½êCN®Í¸sµCVXeªÒµ Ü·DæÊãÌbZ[W©C /dosx/raidboot/raidstat.ro ð²×ê ÎCóê½ACÌXe[^Xðmé±ÆªÅ«Ü·D o sda1(RAID5) © hda1(RAID1) ªÌáµ½êCDOS ÌobNAbvN®p [eBVðuANeBuvɵCBIOS É Vµ¢p[eBVðN ®foCXƵÄF¯³¹é©C é¢ÍC¨IÉ xda p[eBV ðÚ®³¹È¯êÎÈèܹñD»ÌãíèÉCinitrd C[WðgÁÄ tbs[fBXN©çcÁÄ¢éobNAbvN®hCuãÌVXe ðN®·é±ÆàÅ«Ü·D»ÌãCcÁÄ¢éX[p[ubNðÄ \z·é½ßCÌR}hðÀs·é±ÆÅ RAID VXeðÄÑAN eBuÉ·é±ÆªÅ«Ü·D "/sbin/mkraid /etc/raid<it/x/.conf -f --only-superblock" o ±êðsÁ½ãC mdadd -ar ðÀsµÜ·D o âèªÈ¢±Æð¸·é½ßCACÌXe[^Xð²×C»ê©çC óê½fBXNªC³êé©ð·³êéÜÅC³íÈACÌQÆXe [^Xð»ÝÌXe[^XÅu«·¦Ü·D cat /proc/mdstat | grep md0 > /dosx/raidboot/raidgood.ref shutdown -r now ÉæÁijíÈÄN®ðs¢CVXeð³¹Ü·D 6. RAID t@CVXeÌ\z ±ÌLqÍCVXedlÅq×½MÒÌ RAID1 VXeÉÖµÄÌàÌÅ ·D ȽÌVXeªÙÈé RAID ÌA[LeN`ðÌpµÄ¢éê ÍCKXC³µÄ¾³¢DÚµÍ raidtools-0.42 Ét®µÄ¢éI C}j A©CQuickStart.RAID ðQƵľ³¢D 6.1. /etc/raid5.conf # raid-5 configuration raiddev /dev/md0 raid-level 5 nr-raid-disks 4 chunk-size 32 # Parity placement algorithm parity-algorithm left-symmetric # Spare disks for hot reconstruction #nr-spare-disks 0 device /dev/sda3 raid-disk 0 device /dev/sdb3 raid-disk 1 device /dev/sdc3 raid-disk 2 device /dev/sdd3 raid-disk 3 6.2. /etc/raid1.conf # raid-1 configuration raiddev /dev/md0 raid-level 1 nr-raid-disks 2 nr-spare-disks 0 device /dev/hda4 raid-disk 0 device /dev/hdc4 raid-disk 1 6.3. dp RAID t@CVXeð\z·é½ßÌïÌIè MÒÌ RAID5 VXeÅÍCȺÌàÌðCXg[µÄ¢Ü·D Slackware-3.4 ÇÌfBXgr [VÅàåävÅµå¤ linuxthreads-0.71 raidtools-0.42 linux-2.0.33 É raid145 pb`Æ Gadi Ìpb`ðĽàÌ RAID foCXðì¬CtH[}bgµÜ·D mkraid /etc/raid5.conf mdcreate raid5 /dev/md0 /dev/sda3 /dev/sdb3 /dev/sdc3 /dev/sdd3 mdadd -ar mke2fs /dev/md0 mkdir /md mount -t ext2 /dev/md0 /md reboot ªg¤QÆt@Cð쬵ܷD±êÍÇÒÌVXeÅÍÙÈé ©àµêܹñD cat /proc/mdstat | grep md0 > /dosa/raidboot/raidgood.ref cat /proc/mdstat | grep md0 > /dosb/raidboot/raidgood.ref Slackware-3.4 ܽÍÊÌpbP[Wðp¢ÄCOS ðCXg[µÜ·D setup CXg[æÉÍ `/md' ðCCXg[³ÉÍÇÒªigÁÄ¢éà ÌðwèµÜ·DJ[lðKvÈfBXNZbgðIðCCXg[ µÜ·D(Slackware Ìê)VXeÝè(Configure)ðÀsµÜ·ªClilo ÆJ[lÌN®ÌÚÍòεܷDÅãÉ setup R}hðI¹µÜ ·D `pthreads' ðCXg[µÜ·D cd /usr/src/linuxthreads-0.71 Makefile ðÒWµC«ÏðwèµÜ·D BUILDIR=/md make make install `raidtools' ðCXg[µÜ·D cd /usr/src/raidtools-0.42 configure --sbindir=/md/sbin --prefix=/md/usr raidtools Ì `make install' Ŷ·éG[ðC³µÜ·D cd /md/sbin rm mdrun rm mdstop ln -s mdadd mdrun ln -s mdadd mdstop /dev/mdx ðìèÜ·D cp -a /dev/md* /md/dev »ÝÌVXe©çVXeÝèðÇÁµÜ·(G[ͳµÜ·)D cp -dp /etc/* mnt/etc cp -dp /etc/rc.d/* mnt/etc/rc.d (Vµ¢ rc.6 ðÜÞ) mkdir mnt/lib/modules cp -a /lib/modules/2.x.x mnt/lib/modules <-- »ÝgÁÄ¢éJ[l 2.x.x Ìo[W ȺÌt@CðÒWµCÇÒÌt@CVXeÉí¹ÄC³µÜ·D cd /md ñlbg[NÖW etc/fstab ÀÛÌ[gt@CVXeÆ RAID foCXpÉC³µÜ· etc/mdtab ¤Ü®ì·é͸ŷ lbg[NÖW etc/hosts etc/resolv.conf etc/hosts.equiv yÑÖAt@C etc/rc.d/rc.inet1 IP AhXClbg}XNCQ[gEFC etc/rc.d/rc.S t@CVXeÌXe[^XÉ¢Ä̪ðSÄí # Test to see if the root partition isread-only ̪©ç # remove /etc/mtab* so that mount will ..... ÜÅðÜÜÈ¢æ¤ÉµÜ·D±êÉæèCRAM fBXNª ÇÝ«Â\Å}Eg³êéÆoé¤é³¢EH[jO ªoÈÈèÜ·D etc/rc.d/rc.xxxxx KvÈçμÌt@Cà root/.rhosts ൶ݷêÎ home/xxxx/xxxx KvÈçμÌt@Cà x: ±ÌìÅCpX[hÆVhEpX[hÌt@Cà Vµ¢t@CVXeÉÚ³êÜ·I±êÍZL eB Ì_©çÍC]ܵȢ©àµêܹñD VXeãÅêÓÅ é±ÆªKvÈ /dev/disk... ð}Eg·é½ßÌ« ð쬵ܷDMÒÌêÍȺÌæ¤ÉÈèܵ½D cd /md <-- Vµ¢t@CVXeÌ[g mkdir dosa DOSp[eBVÌ}Eg|Cg mkdir dosb DOS ~[p[eBVÌ}Eg|Cg Vµ¢t@CVXeÍ®¬Å·Dmd ÌQÆXe[^Xð `ÀÛÌ'[g foCXÉmFEÛ¶·êÎCN®ÌõÍIíèÅ·D DOS p[eBVð dosa, dosb É}EgµÜ·D cat /proc/mdstat | grep md0 > /dosa/raidboot/raidgood.ref cat /proc/mdstat | grep md0 > /dosb/raidboot/raidgood.ref mdstop /dev/md0 7. ÅãÉÓ·é_ BlÆÍC ébèÉÂ¢Ä È½æèÈÆà1%½Ì±ÆðmÁÄ¢é ḻÆÅ é±ÆðYêȢž³¢Dɯðßé[ðo·Æ «ÉͱÌ_ðYêȢž³¢DÍÀ±ðµÜµ½ªC»êÍ RAID1, RAID5 É¢ĽÁ½êx¸Â¾¯ÈÌÅ·I Michael Robinton Michael@bzs.org <mailto:michael@bzs.org> 8. t^ A. Bohumil Chalupa ³ñÉæé md0 ÌVbg_E Bohumil Chalupa ³ñÌ Linux RAID [OXgÖÌeÅCRAID1, 5 ÅÌ mdstop ÌâèÌñðû@Å·D±Ìû@ÅÍCVbg_EÌÉ RAID foCXªóêÄ¢éÂ\«ÍzèµÄ¢Ü¹ñD»±ÅCMÒªu[ g̳íÈQÆXe[^XðÈPÉär·éæ¤ÉµÜµ½D±êÉæèC ACÉÙíª éÆ«CIy[^ª²®·é±ÆªÅ«Ü·D±êÉ¢ ÄÌÚ×Í{¶Åq×ĢܷD > From: Bohumil Chalupa <bochal@apollo.karlov.mff.cuni.cz> > > initrd Æ linuxrc ðgÁÄRAID1 AC𮩵C»ê©ç root ð > /dev/md0 ɤÜØÖ¦é±Æūܵ½D > > µ©µCACð³íÉ *~ßé* û@Íí©èܹñD »êÅÍCª¨¦µÜµå¤ :-) > Date: Mon, 29 Dec 1997 02:21:38 -0600 (CST) > From: Edward Welbon <welbon@bga.com> > Subject: Re: dismounting root raid device > > RAID0 ÈOÌ md foCXÉ¢ÄÍCSÄ̫ݪI¹µÄ¢é±Æ > ðmé½ßÉXe[^XðÛ¶·éÆv¢Ü·Dà¿ëñC±Ìæ¤ÈXe[ > ^XÍ[hI[Å}Eg³êé[gt@CVXeÉ¢ÄÍ > Û¶³êܹñD±Ìæ¤ÈêC[hI[Ì[gt@CVXe > É«ÝÂ\Èt@CVXe "X" ð}EgÂ\ÅC"X" É« > ݪūÈÄÍÈèܹñ(""ÌìÅà±êðs¢Ü·ªC±¿ > çÍ©®ÅÍ èܹñ)D > > t@CVXe "X" Í RAID(initrd oRÅ linuxrc ªÀs)ªúXe[ > ^Xðæ¾·éu[gfoCXƼèµÜ·DK¢ raid0 ÍXe[^X > «ÝÌKvª èܹñ(mdstop ÌãÉ mdtab É`FbNTð«o > ·±ÆªÅ«êÎðµ¢ÌÅ·ª)D > Æè ¦¸±êð¢¶ÁÄÝÜ·ªC"devil" ªíÉ "details" ÉÜÜê > Ü·ªCïµÍȳ»¤Å·D »¤Å·ËD ௶ACfBAðl¦Ä¢½ÌÅ·ªC·Ôª èܹñŵ½D »êÅCðúâÁÄݽƱëC¤Ü®«Üµ½D ¤¿Ì RAID1(~[)ÅÍC`FbNTâRAIDÌX[p[ubNÌf[^ ÌÛ¶ÍsÁĢܹñD"ÀÛ"Ìu[gp[eBVÌîñCÂÜè[ gÉèĽ md { [ªVbg_EÉ[hI[ÅÄ}E g³ê½±Æ¾¯ðÛ¶µÄ¢Ü·D»µÄCN®É linuxrc XNv gª±Ìîñð©Â¯êÎ mkraid --only-superblock ðÀsµC±êª©Â ©çȯêÎ ckraid ðÀsµÜ·D ÂÜèCRAID ÌX[p[ubNîñÍVbg_EÉÍXV³ê¸C N®ÉXV³êÜ·D Üè·Á«èµ½û@ÅÈ¢ÌÅ·ªC :-( ®¢Äܷ͢D ÍRAIDfoCXð[gɵÄN®·é½ßÉ Edward Welbon ³ñÌ initrd.md Æ Slackware Ìg¹ðgÁĢܷD Ìo¦Ä¢éÀèÅÍCC³µ½t@CÍ mkdisk, linuxrc ÆVbg _EpÌXNvg /etc/rc.d/rc.6 ¾¯Å·D à¿ëñC lilo.conf ÍC³µÜµ½D dvȪð[ÉYtµÄ¨«Ü·D Bohumil Chalupa --------------- my.linuxrc follows ----------------- #!/bin/sh # we need /proc /bin/mount /proc # start up the md0 device. let the /etc/rc.d scripts get the rest of them # we should do as little as possible here # ________________________________________ # root raid1 shutdown test & recreation # /start must be created on the rd image in my.mkdisk echo "preparing md0: mounting /start" /bin/mount /dev/sda2 /start -t ext2 echo "reading saved md0 state from /start" if [ -f /start/root.raid.ok ]; then echo "raid ok, modyfying superblock" rm /start/root.raid.ok /sbin/mkraid /etc/raid1.conf -f --only-superblock else echo "raid not clean, runing ckraid --fix" /sbin/ckraid --fix /etc/raid1.conf fi echo "unmounting /start" /bin/umount /start # _________________________________________ # echo "adding md0 for root file system" /sbin/mdadd /dev/md0 /dev/sda1 /dev/sdb1 echo "starting md0" /sbin/mdrun -p1 /dev/md0 # tell kernel we want to switch to /dev/md0 as root device, the 0x900 value # is arrived at via 256*major_device_number + minor_device number. echo "setting real-root-dev" /bin/echo 0x900>/proc/sys/kernel/real-root-dev # unmount /proc so that the ram disk can be deallocated. echo "unmounting /proc" /bin/umount /proc /bin/echo "We are hopefully ready to mount /dev/md0 (major 9, minor 0) as root" exit --------------- end of my.linuxrc ---------------------------------- ----------- extract from /etc/rc.d/rc.6 follows ----------------- # Turn off swap, then unmount local file systems. echo "Turning off swap." swapoff -a echo "Unmounting local file systems." umount -a -tnonfs # Don't remount UMSDOS root volumes: if [ ! "`mount | head -1 | cut -d ' ' -f 5`" = "umsdos" ]; then mount -n -o remount,ro / fi # Save raid state echo "Saving RAID state" /bin/mount -n /dev/sda2 /start -t ext2 touch /start/root.raid.ok /bin/umount -n /start -------------- end of excerpt from rc.6 ------------------------ ------------------ part of my.mkdisk follows ---------------------- # # now we have the filesystem ready to be populated, we need to # get a few important directories. I had endless trouble till # I created a pristine mtab. In my case, it is convenient that # /etc/mdtab is copied over, this way I can activate md with # a simple "/sbin/mdadd -ar" in linuxrc. # cp -a $ROOT/etc $MOUNTPNT 2>cp.stderr 1>cp.stdout rm -rf $MOUNTPNT/etc/mtab rm -rf $MOUNTPNT/etc/ppp* rm -rf $MOUNTPNT/etc/termcap rm -rf $MOUNTPNT/etc/sendmail* rm -rf $MOUNTPNT/etc/rc.d rm -rf $MOUNTPNT/etc/dos* cp -a $ROOT/sbin $ROOT/dev $ROOT/lib $ROOT/bin $MOUNTPNT 2>>cp.stderr 1>>cp.stdout # _____________________________________________________________________ # RAID: will need mkraid and ckraid cp -a $ROOT/usr/sbin/mkraid $ROOT/usr/sbin/ckraid $MOUNTPNT/sbin 2>>cp.stderr 1>>cp.stdout # --------------------------------------------------------------------- # it seems that init wont come out to play unless it has utmp. this can # probably be pruned back alot. no telling what the real bug was 8-). # mkdir $MOUNTPNT/var $MOUNTPNT/var/log $MOUNTPNT/var/run $MOUNTPNT/initrd touch $MOUNTPNT/var/run/utmp $MOUNTPNT/etc/mtab chmod a+r $MOUNTPNT/var/run/utmp $MOUNTPNT/etc/mtab ln -s /var/run/utmp $MOUNTPNT/var/log/utmp ln -s /var/log/utmp $MOUNTPNT/etc/utmp ls -lstrd $MOUNTPNT/etc/utmp $MOUNTPNT/var/log/utmp $MOUNTPNT/var/run/utmp # # since I wanted to change the mount point, I needed this though # I suppose that I could have done a "mkdir /proc" in linuxrc. # mkdir $MOUNTPNT/proc chmod 555 $MOUNTPNT/proc # # ------------------------------------------------------ # we'll mount the real boot device to /start temporarily # to check the root raid state saved at shutdown time # mkdir $MOUNTPNT/start # ------------------------------------------------------- # # need linuxrc (it is, after all, the point of this exercise). # if [ -x ./my.linuxrc ]; then cp -a ./my.linuxrc $MOUNTPNT/linuxrc chmod 777 $MOUNTPNT/linuxrc else ln -s /bin/sh $MOUNTPNT/linuxrc fi # ----------------- part of my.mkdisk ends ----------------- 9. Vbg_EXNvgÌá o ``Slackware'' o ``Debian'' 9.1. Slackware - /etc/rc.d/rc.6 #! /bin/sh # # rc.6 This file is executed by init when it goes into runlevel # 0 (halt) or runlevel 6 (reboot). It kills all processes, # unmounts file systems and then either halts or reboots. # # Version: @(#)/etc/rc.d/rc.6 1.50 1994-01-15 # # Author: Miquel van Smoorenburg <miquels@drinkel.nl.mugnet.org> # Modified by: Patrick J. Volkerding, <volkerdi@ftp.cdrom.com> # # Modified by: Michael A. Robinton < michael@bizsystems.com > # to add call to rc.raidown # Set the path. PATH=/sbin:/etc:/bin:/usr/bin # Set linefeed mode to avoid staircase effect. stty onlcr echo "Running shutdown script $0:" # Find out how we were called. case "$0" in *0) message="The system is halted." command="halt" ;; *6) message="Rebooting." command=reboot ;; *) echo "$0: call me as \"rc.0\" or \"rc.6\" please!" exit 1 ;; esac ############ Save raid boot and status info ############## # if [ -x /etc/rc.d/rc.raidown ]; then /etc/rc.d/rc.raidown fi ################## end raid boot ######################### # Kill all processes. # INIT is supposed to handle this entirely now, but this didn't always # work correctly without this second pass at killing off the processes. # Since INIT already notified the user that processes were being killed, # we'll avoid echoing this info this time around. if [ "$1" != "fast" ]; then # shutdown did not already kill all processes killall5 -15 killall5 -9 fi # Try to turn off quota and accounting. if [ -x /usr/sbin/quotaoff ] then echo "Turning off quota." /usr/sbin/quotaoff -a fi if [ -x /sbin/accton ] then echo "Turning off accounting." /sbin/accton fi # Before unmounting file systems write a reboot or halt record to wtmp. $command -w # Save localtime [ -e /usr/lib/zoneinfo/localtime ] && cp /usr/lib/zoneinfo/localtime /etc # Asynchronously unmount any remote filesystems: echo "Unmounting remote filesystems." umount -a -tnfs & # Turn off swap, then unmount local file systems. echo "Turning off swap." swapoff -a echo "Unmounting local file systems." umount -a -tnonfs # Don't remount UMSDOS root volumes: if [ ! "`mount | head -1 | cut -d ' ' -f 5`" = "umsdos" ]; then mount -n -o remount,ro / fi ################ for raid arrays ######################### # Stop all known raid arrays (except root which won't stop) if [ -x /sbin/mdstop ]; then echo "Stopping raid" /sbin/mdstop -a fi ########################################################## # See if this is a powerfail situation. if [ -f /etc/powerstatus ]; then echo "Turning off UPS, bye." /sbin/powerd -q exit 1 fi # Now halt or reboot. echo "$message" [ ! -f /etc/fastboot ] && echo "On the next boot fsck will be FORCED." $command -f ############### end rc.6 ################################# 9.2. Debian bo - /etc/init.d/halt and /etc/init.d/reboot The modifications shown here for Debian bo halt and reboot files are NOT TESTED. When you test this, please e-mail me so I can remove this comment. 9.2.1. /etc/init.d/halt #! /bin/sh # # halt The commands in this script are executed as the last # step in runlevel 0, ie halt. # # Version: @(#)halt 1.10 26-Apr-1997 miquels@cistron.nl # PATH=/sbin:/bin:/usr/sbin:/usr/bin ############ Save raid boot and status info ############## # if [ -x /etc/rc.d/rc.raidown ]; then /etc/rc.d/rc.raidown fi ################## end raid boot ######################### # Kill all processes. echo -n "Sending all processes the TERM signal... " killall5 -15 echo "done." sleep 5 echo -n "Sending all processes the KILL signal... " killall5 -9 echo "done." # Write a reboot record to /var/log/wtmp. halt -w # Save the random seed between reboots. /etc/init.d/urandom stop echo -n "Deactivating swap... " swapoff -a echo "done." echo -n "Unmounting file systems... " umount -a echo "done." mount -n -o remount,ro / ################ for raid arrays ######################### # Stop all known raid arrays (except root which won't stop) if [ -x /sbin/mdstop ]; then echo "Stopping raid" /sbin/mdstop -a fi ########################################################## # See if we need to cut the power. if [ -x /etc/init.d/ups-monitor ] then /etc/init.d/ups-monitor poweroff fi halt -d -f ############# end halt #################### 9.2.2. /etc/init.d/reboot #! /bin/sh # # reboot The commands in this script are executed as the last # step in runlevel 6, ie reboot. # # Version: @(#)reboot 1.9 02-Feb-1997 miquels@cistron.nl # PATH=/sbin:/bin:/usr/sbin:/usr/bin ############ Save raid boot and status info ############## # if [ -x /etc/rc.d/rc.raidown ]; then /etc/rc.d/rc.raidown fi ################## end raid boot ######################### # Kill all processes. echo -n "Sending all processes the TERM signal... " killall5 -15 echo "done." sleep 5 echo -n "Sending all processes the KILL signal... " killall5 -9 echo "done." # Write a reboot record to /var/log/wtmp. halt -w # Save the random seed between reboots. /etc/init.d/urandom stop echo -n "Deactivating swap... " swapoff -a echo "done." echo -n "Unmounting file systems... " umount -a echo "done." mount -n -o remount,ro / ################ for raid arrays ######################### # Stop all known raid arrays (except root which won't stop) if [ -x /sbin/mdstop ]; then echo "Stopping raid" /sbin/mdstop -a fi ########################################################## echo -n "Rebooting... " reboot -d -f -i 10. t^ C: »Ì¼ÌÝèt@C 10.1. linuxrc``linuxrc file'' 10.2. loadlin -- linux.bat file - boot.par``linux.bat file - boot.par'' 10.3. linuxthreads Makefile.diff``linuxthreads Makefile.diff'' 10.4. raid1.conf``raid1.conf'' 10.5. raid5.conf``raid5.conf'' 10.6. raidboot.conf``raidboot.conf'' 10.7. rc.raidown``rc.raidown'' 11. t^ D: â linuxrc ÆVbg_EXNvg 11.1. ât@C - linxurc ±Ì linuxrc t@CÍÌßŦ·Vbg_EXNvgÆgÝí ¹êγµ®ìµÜ·D ---------------------- linuxrc -------------------- #!/bin/sh # ver 1.07 2-12-98 # linuxrc - for raid1 using small dos partition and loadlin # # mount the proc file system /bin/mount /proc # This may vary for your system. # Mount the dos partitions, try both # in case one disk is dead /bin/mount /dosa /bin/mount /dosc # Set a flag in case the raid status file is not found # then check both drives for the status file RAIDOWN="raidstat.ro not found" /bin/echo "Reading md0 shutdown status." if [ -f /dosa/raidboot/raidstat.ro ]; then RAIDOWN=`/bin/cat /dosa/raidboot/raidstat.ro` RAIDREF=`/bin/cat /dosc/raidboot/raidgood.ref` else if [ -f /dosc/raidboot/raidstat.ro ]; then RAIDOWN=`/bin/cat /dosc/raidboot/raidstat.ro` RAIDREF=`/bin/cat /dosc/raidboot/raidgood.ref` fi fi # Test for a clean shutdown with all disks operational if [ "${RAIDOWN} != ${RAIDREF}" ]; then echo "ERROR ${RAIDOWN}" # Use the next 2 lines to BAIL OUT and leave rescue running /bin/echo 0x100>/proc/sys/kernel/real-root-dev exit # leaving the error files in dosa/raidboot,etc... fi # The raid array is clean, proceed by removing # status file and writing a clean superblock /bin/rm /dosa/raidboot/raidstat.ro /bin/rm /dosc/raidboot/raidstat.ro /sbin/mkraid /etc/raid1.conf -f --only-superblock /bin/umount /dosa /bin/umount /dosc # Mount raid array echo "Mounting md0, root filesystem" /sbin/mdadd -ar # If there are errors - BAIL OUT and leave rescue running if [ $? -ne 0 ]; then echo "RAID device has errors" # Use the next 3 lines to BAIL OUT /bin/rm /etc/mtab # remove bad mtab /bin/echo 0x100>/proc/sys/kernel/real-root-dev exit fi # else tell the kernel to switch to /dev/md0 as the /root device # The 0x900 value the device number calculated by: # 256*major_device_number + minor_device number /bin/echo 0x900>/proc/sys/kernel/real-root-dev # umount /proc to deallocate initrd device ram space /bin/umount /proc /bin/echo "/dev/md0 mounted as root" exit #------------------ end linuxrc ---------------------- 11.2. ât@C - Vbg_EXNvg ±ÌVbg_EXNvgÍOɦµ½ linuxrc ÆgÝí¹êγµ ®ìµÜ·D RAID ACÌVbg_EÌXe[^Xð¾é½ßÉCt@CVXe ðA}Eg·é¼OÉȺÌsð}üµÜ·D RAIDSTATUS=`/bin/cat /proc/mdstat | /usr/bin/grep md0` SÄÌt@CVXeðA}Egµ½ã([gt@CVXeÍA }Egu³êܹñv)̪ÉCȺðÇÁµÜ·D # root device remains mounted RO # mount dos file systems RW mount -n -o remount,ro / echo "Writing RAID read-only boot FLAG(s)." mount -n /dosa mount -n /dosc # create raid mounted RO flag in duplicate # containing the shutdown status of the raid array echo ${RAIDSTATUS} > /dosa/raidboot/raidstat.ro echo ${RAIDSTATUS} > /dosc/raidboot/raidstat.ro umount -n /dosa umount -n /dosc # Stop all the raid arrays (except root) echo "Stopping raid" mdstop -a ±êÉæÁÄC[gÈOÌSÄÌ RAID foCXª³íÉI¹µÜ·D[ gÌXe[^XÍ raidstat.ro ÉÛ¶³êCñÌN®ÉQƳêÜ·D MÒªÈOÉ RAID1 Ì Slackware VXeÅgÁÄ¢½Vbg_EXN vgÌSÌðȺɦµÜ·DMÒÍ RAID1 ©ç /etc/raidboot.conf t@Cðg¤Vµ¢û@Éæ跦ĢܷD #! /bin/sh # # rc.6 This file is executed by init when it goes into runlevel # 0 (halt) or runlevel 6 (reboot). It kills all processes, # unmounts file systems and then either halts or reboots. # # Version: @(#)/etc/rc.d/rc.6 1.50 1994-01-15 # # Author: Miquel van Smoorenburg <miquels@drinkel.nl.mugnet.org> # Modified by: Patrick J. Volkerding, <volkerdi@ftp.cdrom.com> # Modified by: Michael A. Robinton, <michael@bzs.org> for RAID shutdown # Set the path. PATH=/sbin:/etc:/bin:/usr/bin # Set linefeed mode to avoid staircase effect. stty onlcr echo "Running shutdown script $0:" # Find out how we were called. case "$0" in *0) message="The system is halted." command="halt" ;; *6) message="Rebooting." command=reboot ;; *) echo "$0: call me as \"rc.0\" or \"rc.6\" please!" exit 1 ;; esac # Kill all processes. # INIT is supposed to handle this entirely now, but this didn't always # work correctly without this second pass at killing off the processes. # Since INIT already notified the user that processes were being killed, # we'll avoid echoing this info this time around. if [ "$1" != "fast" ]; then # shutdown did not already kill all processes killall5 -15 killall5 -9 fi # Try to turn off quota and accounting. if [ -x /usr/sbin/quotaoff ] then echo "Turning off quota." /usr/sbin/quotaoff -a fi if [ -x /sbin/accton ] then echo "Turning off accounting." /sbin/accton fi # Before unmounting file systems write a reboot or halt record to wtmp. $command -w # Save localtime [ -e /usr/lib/zoneinfo/localtime ] && cp /usr/lib/zoneinfo/localtime /etc # Asynchronously unmount any remote filesystems: echo "Unmounting remote filesystems." umount -a -tnfs & # you must have issued # 'cat /proc/mdstat | grep md0 > {your boot vol}/raidboot/raidgood.ref' # before linuxrc will execute properly with this info RAIDSTATUS=`/bin/cat /proc/mdstat | /usr/bin/grep md0 # capture raid status` # Turn off swap, then unmount local file systems. # clearing mdtab as well echo "Turning off swap." swapoff -a echo "Unmounting local file systems." umount -a -tnonfs # Don't remount UMSDOS root volumes: if [ ! "`mount | head -1 | cut -d ' ' -f 5`" = "umsdos" ]; then mount -n -o remount,ro / fi # root device remains mounted # mount dos file systems RW echo "Writing RAID read-only boot FLAG(s)." mount -n /dosa mount -n /dosc # create raid mounted RO flag in duplicate # containing the shutdown status of the raid array echo ${RAIDSTATUS} > /dosa/raidboot/raidstat.ro echo ${RAIDSTATUS} > /dosc/raidboot/raidstat.ro umount -n /dosa umount -n /dosc # Stop all the raid arrays (except root) echo "Stopping raid" mdstop -a # See if this is a powerfail situation. if [ -f /etc/power_is_failing ]; then echo "Turning off UPS, bye." /sbin/powerd -q exit 1 fi # Now halt or reboot. echo "$message" [ ! -f /etc/fastboot ] && echo "On the next boot fsck will be FORCED." $command -f 12. t^ E: Gadi Ì RAID â~ÉÖ·éLinux J[lpb` --- linux/drivers/block/md.c.old Fri Nov 21 13:37:11 1997 +++ linux/drivers/block/md.c Sat Dec 6 13:34:28 1997 @@ -622,8 +622,13 @@ return do_md_run (minor, (int) arg); case STOP_MD: - return do_md_stop (minor, inode); - + err = do_md_stop(minor, inode); + if (err) { + printk("md: enabling auto mdstop for %s\n", kdevname(inode->i_rdev)); + md_dev[minor].auto_mdstop = 1; + } + return err; + case BLKGETSIZE: /* Return device size */ if (!arg) return -EINVAL; err=verify_area (VERIFY_WRITE, (long *) arg, sizeof(long)); @@ -692,6 +697,10 @@ sync_dev (inode->i_rdev); md_dev[minor].busy--; + if (!md_dev[minor].busy && md_dev[minor].auto_mdstop) { + do_md_stop(minor, inode); + md_dev[minor].auto_mdstop = 0; + } } static int md_read (struct inode *inode, struct file *file, --- linux/include/linux/md.h~ Fri Nov 21 13:29:14 1997 +++ linux/include/linux/md.h Fri Nov 21 13:29:14 1997 @@ -260,6 +260,7 @@ int repartition; int busy; int nb_dev; + int auto_mdstop; void *private; }; 13. t^ F: rc.raidown ȺÌeLXgð rc.raidown XNvgƵÄC/etc/rc.d ÉZ[uµÜ ·D #! /bin/sh # # rc.raidown This file is executed by init when it goes into runlevel # 0 (halt) or runlevel 6 (reboot). It saves the status of # a root mounted raid array for subsequent re-boot # # Version: 1.08 3-25-98 Michael A. Robinton < michael@bizsystems.com > # ############ Save raid boot and status info ############## if [ -f /etc/raidboot.conf ] then { read RaidBootDevs read RaidStatusPath read RaidConfigEtc } < /etc/raidboot.conf # you must have issued # cat /proc/mdstat | grep md0 > # {your boot vol mnt(s)}/{RaidStatusPath}/raidgood.ref # before linuxrc will execute properly with this info # # capture raid status RAIDSTATUS=`/bin/cat /proc/mdstat | /usr/bin/grep md0` mkdir /tmp/raid$$ echo "Writing RAID read-only boot FLAG(s)." for Device in ${RaidBootDevs} do # get mount point for raid boot device or use tmp RBmount=$( cat /proc/mounts | /usr/bin/grep ${Device} ) if [ -n ${RBmounts} ]; then RBmount=$( echo ${RBmount} | cut -f 2 -d ' ' ) else RBmount="/tmp/raid$$" mount ${Device} ${RBmount} fi if [ -d ${RBmount}/${RaidStatusPath} ]; then # Create raid mounted RO flag = shutdown status of raid array echo ${RAIDSTATUS} > ${RBmount}/${RaidStatusPath}/raidboot.ro # Don't propagate 'fstab' from ramdisk if [ -f /linuxrc ]; then FSTAB= else FSTAB=fstab fi pushd /etc # Save etc files for rescue system /bin/tar --ignore-failed-read \ -cf ${RBmount}/${RaidStatusPath}/raidboot.etc \ raid*.conf mdtab* ${FSTAB} lilo.conf popd # Create new raidboot.cfg { /bin/echo ${RaidBootDevs} /bin/echo ${RaidStatusPath} /bin/echo ${RaidConfigEtc} } > ${RBmount}/${RaidStatusPath}/raidboot.cfg /bin/umount ${RBmount} fi done rmdir /tmp/raid$$ echo "Raid boot armed" fi ################## end raid boot ######################### 14. t^ G: linuxrc Ì®ì´ ±êÍ RAID ð[gt@CVXeÉ}Eg·é½ßÌClinuxrc t@ CÌ¡GÈ`ÌàÌÅ·D±Ìt@CÍ `bash' ©C»êÈOÌVFÖ ªpÅ«éVFãÅÀsµÈ¯êÎÈèܹñD ±Ì_ÍCêÊIÅ èCinitrd C[WàÉ éX^[gAbvt@C âp[^É˶µÈ¢±ÆÅ·D u[gÉJ[lÉæÁÄ LILO â loadlin ©çlinuxrc Én³ê½ Raid_Conf p[^ÍClinuxrc ªKvÆ·éN®foCXâ raidboot Ì2ÂÌú»t@CÌÊuð¦µÜ·(raidboot.etc Æ raidboot.cfg Í Vbg_EXNvgÉæÁÄìçêÜ·)D raidboot.etc ͳÆÈéVXe©çȺɦ·t@Cð tar ÅÜÆß½àÌÅCN®É initrd Ì /etcfBNgÉÈè Ü·D raid* mdtab* fstab lilo.conf ( pÂ\ÈçÎ ) ӷ׫_ÍC±Ìt@CÍVXeªu{ÉvNbV µ½Æ«ÉÍCKvɶÄÒW³êé_Å·D raidboot.cfg Í linuxrc ªKvÆ·écèÌ RAID N®t@C ÌpXÆCgp³êÄ¢éu[gp[eBVyÑpÂ\È obNAbvp[eBV̼OðÁĢܷD±Ìt@C ÍÊíCVbg_Et@CÉæÁÄ쬳êÜ·ªCKvÉ ¶Äè®Åìé±Æà èÜ·D raidboot.cfg Í3sCRg³µÌ`®Å·D /dev/bootdev1 /dev/bootdev2 [/dev/bootdev3 ... ] raid-status/path name_of_raidX.conf_file raid-status/path Í}Eg|Cg̼OÍÜÝܹñD raidX.conf Ìt@C¼Í /etc fBNgàÌàÌÅCÊí Í ckraid Æ mkraid ̽ßÉp¢çêÜ·D ȺÌÇÁt@CÍC¸ÁÆgp·é RAID N®p[eBVÉu«Ü ·D±êÍãÅq×½ÌƯ¶àÌÅ·ªCñíÔÉÍpÂ\ÈCÓÌê (á¦ÎN®tbs[fBXN)©ç[h·é±ÆªÅ«Ü·D o raidgood.ref ÍÌR}hÉæÁÄ쬳êÜ·D cat /proc/mdstat | grep md0 > /{raid_status_path}/raidgood.ref ±Ìt@CƱÌÌt@CðZ[u·éêÍC``Vbg_E XNvg''ÌÍðQƵľ³¢D o raidstat.ro ÍVbg_EÉñ rc XNvgÉæÁÄ쬳 êCRAID ACÌI¹Xe[^XðÛ¶µÜ·D