<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN"> <HTML> <HEAD> <META NAME="GENERATOR" CONTENT="SGML-Tools 1.0.9"> <TITLE>HOWTO: Multi Disk System Tuning: Implementation</TITLE> <LINK HREF="Multi-Disk-HOWTO-13.html" REL=next> <LINK HREF="Multi-Disk-HOWTO-11.html" REL=previous> <LINK HREF="Multi-Disk-HOWTO.html#toc12" REL=contents> </HEAD> <BODY> <A HREF="Multi-Disk-HOWTO-13.html">Next</A> <A HREF="Multi-Disk-HOWTO-11.html">Previous</A> <A HREF="Multi-Disk-HOWTO.html#toc12">Contents</A> <HR> <H2><A NAME="s12">12. Implementation</A></H2> <P> <!-- disk!implementation --> Having done the layout you should now have a detailed description on what goes where. Most likely this will be on paper but hopefully someone will make a more automated system that can deal with everything from the design, through partitioning to formatting and installation. This is the route one will have to take to realise the design. <P>Modern distributions come with installation tools that will guide you through partitioning and formatting and also set up <CODE>/etc/fstab</CODE> for you automatically. For later modifications, however, you will need to understand the underlying mechanisms. <P> <P> <H2><A NAME="ss12.1">12.1 Checklist</A> </H2> <P> <!-- disk!implementation!checklist --> Before starting make sure you have the following: <UL> <LI>Written notes of what goes where, your design</LI> <LI>A functioning, tested rescue disk</LI> <LI>A fresh backup of your precious data</LI> <LI>At least two formatted, tested and empty floppies</LI> <LI>Read and understood the man page for fdisk or equivalent</LI> <LI>Patience, concentration and elbow grease</LI> </UL> <P> <P> <H2><A NAME="ss12.2">12.2 Drives and Partitions</A> </H2> <P> <!-- disk!implementation!drives --> <!-- disk!implementation!partitions --> When you start DOS or the like you will find all partitions labeled <CODE>C:</CODE> and onwards, with no differentiation on IDE, SCSI, network or whatever type of media you have. In the world of Linux this is rather different. During booting you will see partitions described like this: <HR> <PRE> Dec 6 23:45:18 demos kernel: Partition check: Dec 6 23:45:18 demos kernel: sda: sda1 Dec 6 23:45:18 demos kernel: hda: hda1 hda2 </PRE> <HR> <P>SCSI drives are labelled <CODE>sda</CODE>, <CODE>sdb</CODE>, <CODE>sdc</CODE> etc, and (E)IDE drives are labelled <CODE>hda</CODE>, <CODE>hdb</CODE>, <CODE>hdc</CODE> etc. There are also standard names for all devices, full information can be found in <CODE>/dev/MAKEDEV</CODE> and <CODE>/usr/src/linux/Documentation/devices.txt</CODE>. <P>Partitions are labelled numerically for each drive <CODE>hda1</CODE>, <CODE>hda2</CODE> and so on. On SCSI drives there can be 15 partitions per drive, on EIDE drives there can be 63 partitions per drive. Both limits exceed what is currently useful for most disks. <P>These are then mounted according to the file <CODE>/etc/fstab</CODE> before they appear as a part of the file system. <P> <P> <H2><A NAME="ss12.3">12.3 Partitioning</A> </H2> <P> <!-- disk!implementation!partitioning --> <!-- disk!fdisk --> <!-- disk!cfdisk --> <!-- disk!sfdisk --> <!-- disk!Disk Druid --> <P><I>It feels so good / It's a marginal risk / when I clear off / windows with fdisk! </I> (the Dustbunny in an <A HREF="http://www.userfriendly.org/cartoons/archives/99feb/19990221.html">issue</A> of <A HREF="http://www.userfriendly.org/">User Friendly</A> in the song "Refund this") <P>First you have to partition each drive into a number of separate partitions. Under Linux there are two main methods, <CODE>fdisk</CODE> and the more screen oriented <CODE>cfdisk</CODE>. These are complex programs, read the manual <EM>very</EM> carefully. For the experts there is now also <CODE>sfdisk</CODE>. <P> <P>Partitions come in 3 flavours, <CODE>primary</CODE>, <CODE>extended</CODE> and <CODE>logical</CODE>. You have to use <CODE>primary</CODE> partitions for booting, but there is a maximum of 4 primary partitions. If you want more you have to define an <CODE>extended</CODE> partition within which you define your <CODE>logical</CODE> partitions. <P>Each partition has an identifier number which tells the operating system what it is, for Linux the types <CODE>swap(82)</CODE> and <CODE>ext2fs(83)</CODE> are the ones you will need to know. If you want to use RAID with autostart you have to check the documentation for the appropriate type number for the RAID partition. <P>There is a readme file that comes with <CODE>fdisk</CODE> that gives more in-depth information on partitioning. <P>Someone has just made a <EM>Partitioning HOWTO</EM> which contains excellent, in depth information on the nitty-gritty of partitioning. Rather than repeating it here and bloating this document further, I will instead refer you to it instead. <P>Redhat has written a screen oriented utility called <EM>Disk Druid</EM> which is supposed to be a user friendly alternative to <CODE>fdisk</CODE> and <CODE>cfdisk</CODE> and also automates a few other things. Unfortunately this product is not quite mature so if you use it and cannot get it to work you are well advised to try <CODE>fdisk</CODE> or <CODE>cfdisk</CODE>. <P>Not to be outdone, Mandrakesoft has made an even more graphic alternative called <A HREF="http://www.linux-mandrake.com/diskdrake/">Diskdrake</A> that also offers numerous features. <P>Also the GNU project offers a partitioning tool called <A HREF="http://www.gnu.org/software/parted/">GNU Parted</A><P> <P>The <A HREF="http://www.users.intercom.com/~ranish/part/">Ranish Partition Manager</A> is another free alternative, while <A HREF="http://www.powerquest.com">Partition Magic</A> is a popular commercial alternative which also offers some support for resizing <CODE>ext2fs</CODE> partitions. <P>Note that Windows will complain if it finds more than one primary partition on a drive. Also it appears to assign drive letters to primary partitions as it finds disks before starting over from the first disk to assign subsequent drive names to logical partitions. <P>If you want DOS/Windows on your system you should make that partition first, a primary one to boot to, made with the DOS <CODE>fdisk</CODE> program. Then if you want NT you put that one in. Finally, for Linux, you create those partitions with the Linux <CODE>fdisk</CODE> program or equivalents. Linux is flexible enough to boot from both primary as well as logical partitions. <P>In depth information on DOS <CODE>fdisk</CODE> can be found at <A HREF="http://www.fdisk.com/fdisk/">Fdisk.com</A> and <A HREF="http://members.aol.com/axcel216/secrets.htm">MS-DOS 5.00 - 7.10 Undocumented, Secret + Hidden Features</A> which details even more bugs and pitfalls. <P> <H2><A NAME="repartitioning"></A> <A NAME="ss12.4">12.4 Repartitioning </A> </H2> <P> <!-- disk!implementation!repartitioning --> <!-- disk!ShowFat --> <!-- disk!fips --> <!-- disk!Partition Magic --> <!-- disk!Partition Resizer --> Sometimes it is necessary to change the sizes of existing partitions while keeping the contents intact. One way is of course to back up everything, recreate new partitions and then restore the old contents, and while this gives your back up system a good test it is also rather time consuming. <P>Partition resizing is a simpler alternative where a file system is first shrunk to desired volume and then the partition table is updated to reflect the new end of partition position. This process is therefore very file system sensitive. <P>Repartitioning requires there to be free space at the end of the file space so to ensure you are able to shrink the size you should first defragment your drive and empty any wastebaskets. <P>Using <A HREF="http://www.igd.fhg.de/~aschaefe/fips/">fips</A> you can resize a <CODE>fat</CODE> partition, and the latest version 1.6 of <CODE>fips</CODE> or <CODE>fips 2.0</CODE> are also able to resize <CODE>fat32</CODE> partition. Note that these programs actually run under DOS. <P>Resizing other file systems are much more complicated but one popular commercial system <A HREF="http://www.powerquest.com">Partition Magic</A> is able to resize more file system types, including <CODE>ext2fs</CODE> using the <CODE>resize2fs</CODE> program. Make sure you get the latest updates to this program as recent versions had problems with large disks. <P> <P>In order to get the most out of <CODE>fips</CODE> you should first delete unnecessary files, empty wastebaskets etc. before defragmenting your drive. This way you can allocate more space to other partitions. If the program complains there are still files at the end of your drive it is probably hidden files generated by Microsoft Mirror or Norton Image. These are probably called <CODE>image.idx</CODE> and <CODE>image.dat</CODE> and contain backups of some system files. <P>There are reports that in some Windows defragmentation programs you should make sure the box "allow Windows to move files around" is <EM>not</EM> checked, otherwise you will end up with some files in the last cylinder of the partition which will prevent FIPS from reclaiming space. <P>If you still have unmovable files at the end of your DOS partition you should get the DOS program <A HREF="http://www8.pair.com/dmurdoch/programs/showfat.htm">showfat</A> version 3.0 or higher. This shows you what files are where so you can deal with them directly. <P>A freeware alternative is <A HREF="http://members.nbci.com/Zeleps/">Partition Resizer</A> which can shrink, grow and move partitions. <P>Some versions of DOS / Windows have a hidden flag for <CODE>defrag</CODE>, "<CODE>/P</CODE> that causes <CODE>defrag</CODE> to move even hidden files. Use at own risk. <P> <P>Repartitioning is as dangerous process as any other partitioning so you are advised to have a fresh backup handy. <P> <P> <H2><A NAME="microsoft-partition-bug"></A> <A NAME="ss12.5">12.5 Microsoft Partition Bug </A> </H2> <P> <!-- disk!implementation!Microsoft Partition Bug --> <!-- disk!Microsoft!nasty bug --> In Microsoft products all the way up to Win 98 there is a tricky bug that can cause you a bit of trouble: if you have several primary <CODE>fat</CODE> partitions and the last extended partition is not a <CODE>fat</CODE> partition the Microsoft system will try to mount the last partition as if it were a FAT partition in place of the last primary FAT partition. <P>There is more <A HREF="http://www.v-com.com/">information</A> available on the net on this. <P>To avoid this you can place a small logical <CODE>fat</CODE> partition at the very end of your disk. <P>More information on multi OS installations are available at <A HREF="http://www.v-com.com/">V Communications</A> but they keep rearranging the links continuously so no direct links can be offered here. <P> <P>Since some hardware comes with setup software that is available under DOS only this could come in handy anyway. Notable examples are RAID controllers from DPT and a number of networking cards. <P> <H2><A NAME="ss12.6">12.6 Multiple Devices (<CODE>md</CODE>)</A> </H2> <P> <!-- disk!implementation!multiple devices --> <!-- disk!implementation!devices, multiple --> Being in a state of flux you should make sure to read the latest documentation on this kernel feature. It is not yet stable, beware. <P>Briefly explained it works by adding partitions together into new devices <CODE>md0</CODE>, <CODE>md1</CODE> etc. using <CODE>mdadd</CODE> before you activate them using <CODE>mdrun</CODE>. This process can be automated using the file <CODE>/etc/mdtab</CODE>. <P>The latest <CODE>md</CODE> system uses a <A HREF="file:///etc/raidtab">/etc/raidtab</A> and a different syntax. Make sure your RAID-tools package matches the <CODE>md</CODE> version as the internal protocol has changed. <P>Then you then treat these like any other partition on a drive. Proceed with formatting etc. as described below using these new devices. <P>There is now also a HOWTO in development for RAID using <CODE>md</CODE> you should read. <P> <P> <H2><A NAME="ss12.7">12.7 Formatting</A> </H2> <P> <!-- disk!implementation!formatting --> Next comes partition formatting, putting down the data structures that will describe the files and where they are located. If this is the first time it is recommended you use formatting with verify. Strictly speaking it should not be necessary but this exercises the I/O hard enough that it can uncover potential problems, such as incorrect termination, before you store your precious data. Look up the command <CODE>mkfs</CODE> for more details. <P>Linux can support a great number of file systems, rather than repeating the details you can read the man page for <CODE>fs</CODE> which describes them in some details. Note that your kernel has to have the drivers compiled in or made as modules in order to be able to use these features. When the time comes for kernel compiling you should read carefully through the file system feature list. If you use <CODE>make menuconfig</CODE> you can get online help for each file system type. <P>Note that some rescue disk systems require <CODE>minix</CODE>, <CODE>msdos</CODE> and <CODE>ext2fs</CODE> to be compiled into the kernel. <P>Also swap partitions have to be prepared, and for this you use <CODE>mkswap</CODE>. <P>Some important notes on formatting with DOS and Windows can be found in <A HREF="http://members.aol.com/axcel216/secrets.htm">MS-DOS 5.00 - 7.10 Undocumented, Secret + Hidden Features</A>. <P>Note that this formatting is high level formatting, that writes the file system to the disk, as opposed to low level formatting that lays down tracks and sectors. The latter is hardly ever needed these days. <P> <H2><A NAME="ss12.8">12.8 Mounting</A> </H2> <P> <!-- disk!implementation!mounting --> Data on a partition is not available to the file system until it is mounted on a mount point. This can be done manually using <CODE>mount</CODE> or automatically during booting by adding appropriate lines to <CODE>/etc/fstab</CODE>. Read the manual for <CODE>mount</CODE> and pay close attention to the tabulation. <P> <P> <H2><A NAME="ss12.9">12.9 <CODE>fstab</CODE></A> </H2> <P> <!-- disk!implementation!fstab --> <!-- disk!fstab --> During the booting process the system mounts all partitions as described in the <CODE>fstab</CODE> file which can look something like this: <P> <BLOCKQUOTE><CODE> <PRE> # <file system> <mount point> <type> <options> <dump> <pass> /dev/hda2 / ext2 defaults 0 1 None none swap sw 0 0 proc /proc proc defaults 0 0 /dev/hda1 /dosc vfat defaults 0 1 </PRE> </CODE></BLOCKQUOTE> <P>This file is somewhat sensitive to the formatting used so it is best and also most convenient to edit it using one of the editing tools made for this purpose, such as <A HREF="http://www.bit.net.au/~bhepple/fstool/">on the netfstool</A>, a Tcl/Tk-based file system mounter, and <A HREF="http://kfstab.purespace.de/kfstab/">kfstab</A>, an editing tool for KDE. <P>Briefly, the fields are partition name, where to mount the partition, type of file system, mount options, when to dump for backup and when to do <CODE>fsck</CODE>. <P>Linux offers the possibility of parallel file checking (<CODE>fsck</CODE>) but to be efficient it is important not to <CODE>fsck</CODE> more than one partition on a drive at a time. <P> <P> <H2><A NAME="ss12.10">12.10 Mount options</A> </H2> <P> <!-- disk!mount --> Mounting, either by hand or using the <CODE>fstab</CODE>, allows for a number of options that offers extra protection. Below are some of the more useful options. <P> <DL> <DT><B>nodev</B><DD><P>Do not interpret character or block special devices on the file system. <P> <DT><B>noexec</B><DD><P>This disallows execution of any binaries on the mounted file system. Useful in spool areas. <P> <DT><B>nosuid</B><DD><P>This disallows set-user-identifier or set-group-identifier on the mounted file system. Useful in home directories. </DL> <P> <P>For more information and cautions refer to the man page for <CODE>mount</CODE> and <CODE>fstab</CODE>. <P> <P> <H2><A NAME="ss12.11">12.11 Recommendations</A> </H2> <P>Having constructed and implemented your clever scheme you are well advised to make a complete record of it all, on paper. After all having all the necessary information on disk is no use if the machine is down. <P>Partition tables can be damaged or lost, in which case it is excruciatingly important that you enter the exact same numbers into <CODE>fdisk</CODE> so you can rescue your system. You can use the program <CODE>printpar</CODE> to make a clear record of the tables. Also write down the SCSI numbers or IDE names for each disk so you can put the system together again in the right order. <P>There is also a small script in appendix <A HREF="Multi-Disk-HOWTO-33.html#disk-documenter">Appendix M: Disk System Documenter</A> which will generate a summary of your disk configurations. <P>For checking your hard disks you can use the Disk Advisor boot disk available <A HREF="http://www.ontrack.com/">on the net</A>. The disk builder required Windows to run. This system is useful to diagnose failed disks. <P>You are strongly recommended to make a rescue disk and <EM>test</EM> it. Most distributions make on available and is often part of the installation disks. For some, such as the one for Redhat 6.1 the way to invoke the disk as a rescue disk is to type <EM>linux rescue</EM> at the boot prompt. <P>There are also specialised rescue disk distributions available on the net. <P>When need for it comes you will need to know where your root and boot partitions reside which you need to write down and keep safe. <P>Note: the difference between a boot disk and a rescue disk is that a boot disk will fail if it cannot mount the file system, typically on your hard disk. A rescue disk is self contained and will work even if there are no hard disks. <P> <P> <HR> <A HREF="Multi-Disk-HOWTO-13.html">Next</A> <A HREF="Multi-Disk-HOWTO-11.html">Previous</A> <A HREF="Multi-Disk-HOWTO.html#toc12">Contents</A> </BODY> </HTML>