mirror of https://github.com/tLDP/LDP
1262 lines
45 KiB
Plaintext
1262 lines
45 KiB
Plaintext
|
<!-- This is the Linux Swap-Space Mini-HOWTO, SGML source -- >
|
||
|
<!-- Rahul U. Joshi, jurahul@hotmail.com http://jurahul.freeservers.com -- >
|
||
|
<!-- Version 1.42 -- >
|
||
|
|
||
|
<!doctype linuxdoc system>
|
||
|
|
||
|
<article>
|
||
|
|
||
|
<title>Linux Swap Space Mini-HOWTO
|
||
|
<author>Rahul U. Joshi, <url url="mailto:jurahul@hotmail.com" name="jurahul@hotmail.com">
|
||
|
<url url="http://jurahul.freeservers.com" name="http://jurahul.freeservers.com">
|
||
|
<date>v1.42, 18 January 2000
|
||
|
|
||
|
<abstract>
|
||
|
This Linux Mini-HOWTO describes how to share your Linux swap partition with
|
||
|
Windows.
|
||
|
</abstract>
|
||
|
|
||
|
<toc>
|
||
|
|
||
|
<sect>Introduction
|
||
|
|
||
|
<p>
|
||
|
Many people use both Linux and MS-Windows. The ability to do so is an
|
||
|
important part of "the Linux revolution"; i.e. letting people
|
||
|
experiment with (and get hooked on) Linux while still being able to
|
||
|
run their off-the-shelf software. Since both Linux and MS-Windows use
|
||
|
virtual memory with swap to disk, a frequently occurring question in
|
||
|
comp.os.linux.setup is how to share swap spaces, in order to reduce the
|
||
|
amount of disk space needed.
|
||
|
|
||
|
There are several methods for sharing swap spaces, the one described
|
||
|
in this document is probably the most complicated one but is the only
|
||
|
one I have encountered that allows maximum performance for both
|
||
|
environments without the risk of trashing a disk partition. If you are
|
||
|
using DOS, then many DOS applications manage their own swap files. You
|
||
|
can also share the Linux swap partition with these applications.
|
||
|
|
||
|
|
||
|
<sect> What you need
|
||
|
<p>
|
||
|
This procedure have a few requirements that need to be filled. I
|
||
|
strongly recommend that you fill these requirements *anyway*, as there
|
||
|
are several problems with older versions.
|
||
|
|
||
|
<p>
|
||
|
<enum>
|
||
|
<item>
|
||
|
MS-DOS 5.0 or newer and MS-Windows 3.1/3.11 <bf>OR</bf> MS-Windows 95/98
|
||
|
<item>
|
||
|
A shutdown/init that knows to run a file on shutdown.
|
||
|
(The SysVinit-2.50 package can do this, for example.
|
||
|
SysVinit-2.50 is available from sunsite.unc.edu in
|
||
|
/pub/Linux/system/Daemons. Almost all current distributions
|
||
|
use this init package.)
|
||
|
</enum>
|
||
|
</p>
|
||
|
|
||
|
<sect> Recent Changes and versions
|
||
|
<p>
|
||
|
<itemize>
|
||
|
<item> Version 1.3 -- Written by H. Peter Anvin, and was not maintained
|
||
|
from 15 Jan 1998.
|
||
|
<item> Version 1.4 -- Based on v1.3, but added more details.
|
||
|
Currently maintained by Rahul U. Joshi
|
||
|
<item> Version 1.42 -- Deleted the recovery section for v1.4 users an v1.4
|
||
|
never actually appeared on the LDP website.
|
||
|
</itemize>
|
||
|
</p>
|
||
|
|
||
|
<p>
|
||
|
Modifications by Rahul U. Joshi
|
||
|
|
||
|
Date: 26 Nov 1999
|
||
|
</p>
|
||
|
|
||
|
<p>
|
||
|
<itemize>
|
||
|
<item> Added Windows 95/98 specific details.
|
||
|
<item> Added Red Hat Linux specific details.
|
||
|
<item> Modified the msinfo program.
|
||
|
<item> Added sections 5 to 12.
|
||
|
<item> Completely revamped the "Procedure" section to make it more understandable.
|
||
|
<item> Split up the swap initialization and halt into two shell scripts.
|
||
|
<item> Modified the scripts to handle signature verification more than once.
|
||
|
<item> Added details about new type swap areas.
|
||
|
<item> Added more reliable schemes.
|
||
|
</itemize>
|
||
|
</p>
|
||
|
|
||
|
|
||
|
<sect>Administrative
|
||
|
<sect1>Copyright
|
||
|
<p>
|
||
|
Unless otherwise stated, Linux HOWTO documents are copyrighted by
|
||
|
their respective authors. Linux HOWTO documents may be reproduced and
|
||
|
distributed in whole or in part, in any medium physical or electronic,
|
||
|
as long as this copyright notice is retained on all copies. Commercial
|
||
|
redistribution is allowed and encouraged; however, the author would
|
||
|
like to be notified of any such distributions.
|
||
|
|
||
|
All translations, derivative works, or aggregate works incorporating
|
||
|
any Linux HOWTO documents must be covered under this copyright notice.
|
||
|
That is, you may not produce a derivative work from a HOWTO and impose
|
||
|
additional restrictions on its distribution. Exceptions to these rules
|
||
|
may be granted under certain conditions; please contact the Linux
|
||
|
HOWTO coordinator at the address given below.
|
||
|
|
||
|
In short, we wish to promote dissemination of this information through
|
||
|
as many channels as possible. However, we do wish to retain copyright
|
||
|
on the HOWTO documents, and would like to be notified of any plans to
|
||
|
redistribute the HOWTOs.
|
||
|
|
||
|
If you have questions, please contact Tim Bynum, the Linux HOWTO
|
||
|
coordinator, at <url url="mailto:linux-howto@sunsite.unc.edu" name =
|
||
|
"linux-howto@sunsite.unc.edu"> via email.
|
||
|
|
||
|
|
||
|
<sect1>Disclaimer
|
||
|
<p>
|
||
|
Although I have tried my best to bring out various facts, the author is
|
||
|
not responsible for any damage due to the actions taken based upon the
|
||
|
information contained in this document. It is impossible to test the
|
||
|
things under all the configurations, so probably some of the hints given
|
||
|
in this document may be buggy and may not work on your system. In case you
|
||
|
trace the bug, let me know it first !
|
||
|
|
||
|
This document is provided ``as is''. I put great effort into writing
|
||
|
it as accurately as I could, but you use the information contained in
|
||
|
it at your own risk. In no event shall I be liable for any damages
|
||
|
resulting from the use of this work.
|
||
|
|
||
|
In case you are planning to include this HOWTO on some distribution medium
|
||
|
or in print, I will like to have an acknowledgement e-mail (just for my
|
||
|
record). In that case, I may also be able to send you the latest version of
|
||
|
the document.
|
||
|
|
||
|
|
||
|
<sect>Before you begin
|
||
|
<p>
|
||
|
This is <bf>not</bf> a step by step HOWTO. The reader is expected to first
|
||
|
read the entire document so that he (or she) becomes aware of the possible
|
||
|
pitfalls and performance bottlenecks. After having a fair idea as to what
|
||
|
steps are to be taken, he (or she) can then follow the next section in a
|
||
|
step by step manner. Since you will be playing as a root and that too with
|
||
|
the system initialization files, be alert as to what you are doing. Write in
|
||
|
those files comments for those sections that you added, and when you want
|
||
|
to remove a section, do not delete it. Instead just comment it out. (In
|
||
|
shell scripts comments begin with a pound(#) sign). In case things go wrong,
|
||
|
you may restore your original configuration by removing the changes you did.
|
||
|
Although you are not required to know shell scripting since I have given all
|
||
|
those that would be needed, some knowledge may be advantageous both for
|
||
|
understanding as well for debugging.
|
||
|
|
||
|
<sect> The Procedure
|
||
|
|
||
|
<p>
|
||
|
<em><idx>NOTE:</idx></em>
|
||
|
This procedure has been written keeping in mind RedHat Linux 6.0
|
||
|
Although this procedure in general is applicable for all Linux
|
||
|
distributions, the details may vary. You are welcome to add the
|
||
|
details for your distribution. Many users will already have a
|
||
|
swap partition devoted to Linux. I assume you have one.
|
||
|
</p>
|
||
|
|
||
|
|
||
|
<sect1> Turn off swapping and create a DOS partition
|
||
|
<p>
|
||
|
<itemize>
|
||
|
<item>
|
||
|
<p>
|
||
|
Boot Linux. Turn off swapping by editing the /etc/fstab file and commenting
|
||
|
the line that describes your swap partition.
|
||
|
|
||
|
<item>
|
||
|
<p>
|
||
|
Using fdisk under Linux, delete the swap partition in order to create free
|
||
|
space on the disk.
|
||
|
|
||
|
<item>
|
||
|
<p>
|
||
|
Boot DOS. Create a DOS partition (using FDISK) the size = the size swap space
|
||
|
you want. If you cannot create the partition (probably because DOS FDISK says
|
||
|
that all the space in extended partition is allocated to the logical drive),
|
||
|
you can use fdisk or cfdisk under Linux to create the partition. You can even
|
||
|
just change the type of your swap partition from 82h (Linux Swap) to 06h (FAT16).
|
||
|
In that case you don't need to delete the swap partition, just change the type.
|
||
|
|
||
|
<item>
|
||
|
<p>
|
||
|
Once you have created the partition, Boot DOS if you are not already in DOS.
|
||
|
DOS will be assigned a drive letter to your new partition. Use that drive
|
||
|
letter instead of X whenever these instructions lists a command like "LABEL X:"
|
||
|
or "COPY FOO X:DUMMY.DAT"
|
||
|
|
||
|
<item>
|
||
|
<p>
|
||
|
Format this partition using the DOS FORMAT command.
|
||
|
<tscreen> <verb>
|
||
|
C:\>FORMAT X:
|
||
|
</verb></tscreen>
|
||
|
|
||
|
<item>
|
||
|
<p>
|
||
|
Set the volume label on this partition to "SWAP SPACE" using the DOS LABEL
|
||
|
command. Verify it by the DIR command. Please do this as a separate step.
|
||
|
Some versions of FORMAT do not seem to put the volume label in the boot sector
|
||
|
as it should. [Note: some people has written me saying the volume label is
|
||
|
stored in the root directory. Yes, but at least since DOS 5.0 it has also been
|
||
|
in the boot sector.]
|
||
|
<tscreen><verb>
|
||
|
C:\>LABEL X:
|
||
|
C:\>DIR X:
|
||
|
</verb></tscreen>
|
||
|
|
||
|
<item>
|
||
|
<p>
|
||
|
At this stage, you have a DOS partition ready for use for swapping.
|
||
|
|
||
|
|
||
|
|
||
|
</itemize>
|
||
|
</p>
|
||
|
|
||
|
<sect1> Tell Windows the location of the new swap file
|
||
|
|
||
|
<sect2><bf>For Windows 3.1 users</bf>
|
||
|
<p>
|
||
|
<itemize>
|
||
|
<item>
|
||
|
<p>
|
||
|
Start Windows. Go to the Control Panel, select "386 Enhanced". Select "Virtual
|
||
|
Memory" and create a Windows Permanent swap file on drive X: of maximum size
|
||
|
(Windows will tell you the maximum size). Windows may complain saying it will
|
||
|
not use a swap file that big. Ignore the message and create the file anyway.
|
||
|
|
||
|
|
||
|
<item>
|
||
|
<p>
|
||
|
Exit Windows.
|
||
|
|
||
|
|
||
|
</itemize>
|
||
|
</p>
|
||
|
|
||
|
<sect2><bf> For Windows 95/98 users </bf>
|
||
|
<p>
|
||
|
<itemize>
|
||
|
<item>
|
||
|
<p>
|
||
|
Start Windows. Go to the Control Panel (Start | Settings | Control panel).
|
||
|
Double click the System icon. In the resulting System Properties dialog box,
|
||
|
select the Performance tab. Now click the Virtual Memory button. This will
|
||
|
bring up the Virtual Memory dialog box. Select "Let me specify my own virtual
|
||
|
memory settings". Select the drive you intend to share as swap space with Linux
|
||
|
(X:). Keep the Maximum and Minimum values as selected by Windows. Click
|
||
|
OK. Windows will prompt you to restart your computer. Do it.
|
||
|
|
||
|
|
||
|
|
||
|
<item>
|
||
|
<p>
|
||
|
When you restart Windows, you will see that the win386.swp file has been
|
||
|
created on the X: drive. In addition, there is also the Recycled folder.
|
||
|
Since you don't intend to store any other files on this drive and also a single
|
||
|
file on this partition will be convienent, tell Windows not to maintain
|
||
|
Recycle Bin for this (X:) drive. On the Desktop, left click the Recycle Bin
|
||
|
icon, and in the resulting pop-up menu, click Properties. This will bring up
|
||
|
the Recycle Bin Properties dialog box. Click the Global tab and select
|
||
|
"Configure drives independently". Now click the tab for X: drive (which will
|
||
|
have the label SWAP SPACE). In this dialog box, move the slider for "Maximum
|
||
|
size of Recycle Bin" to 0 percent. The "Space Reserved" entry should now read
|
||
|
as 0 bytes. Click OK. Restart your computer.
|
||
|
|
||
|
<item>
|
||
|
<p>
|
||
|
Now that you are not maintaining the Recycle Bin for drive X:, ideally the
|
||
|
<tt>RECYCLED</tt> folder from X: must be deleted by Windows. Not only
|
||
|
Windows doesn't does that, but also does not allow you to delete the
|
||
|
folder. But as I said earlier, this folder is now unnecessary and we want
|
||
|
drive X: to contain only the win386.swp file. For that purpose, first
|
||
|
start your computer in MS-DOS mode. Select Start | Shut Down | Restart
|
||
|
your computer in MS-DOS mode, or if you are booting Windows, press F8 at
|
||
|
the start, and then from the startup menu, select Command Prompt only.
|
||
|
Once you are in MS-DOS mode, type the following commands:
|
||
|
<tscreen><verb>
|
||
|
C:\>X:
|
||
|
X:\>ATTRIB -R -H -S RECYCLED
|
||
|
X:\>DELTREE RECYCLED
|
||
|
</verb></tscreen>
|
||
|
|
||
|
Now you have drive X: containing only win386.swp. You can verify this
|
||
|
using the various options for the <tt>dir</tt>command. This does not mean
|
||
|
that the <tt>RECYCLED</tt> folder will not be there on drive X:. When
|
||
|
Windows boots up and finds that there is no <tt>RECYCLED</tt> folder on
|
||
|
X:, it will create it automatically. However, when we will be restoring X:
|
||
|
from Linux, it will simply contain win386.swp file. If anyone is aware of
|
||
|
a method to prevent Windows from creating the <tt>RECYCLED</tt> folder,
|
||
|
please e-mail me.
|
||
|
|
||
|
|
||
|
<item>
|
||
|
<bf> Disk Cleanup troubles you ? </bf>
|
||
|
<p>
|
||
|
If you have Disk Cleanup installed, then ocassionally Windows comes out with a
|
||
|
"Low disk space on drive X:". Since we are using the entire X: drive for
|
||
|
swapping, there is no need to have any free space on X:. To prevent this dialog
|
||
|
box from appearing, start Disk Cleanup (point to Start | Programs |
|
||
|
Accessories | System Tools | Disk Cleanup). In the resulting dialog box,
|
||
|
select the X: drive and click OK. The "Disk Cleanup for drive X:" dialog box
|
||
|
appears. Click the "Settings" tab and uncheck the "If this drive runs low on
|
||
|
disk ... blah blah blah" check box.
|
||
|
|
||
|
|
||
|
</itemize>
|
||
|
</p>
|
||
|
|
||
|
<p>
|
||
|
>From this stage onwards, Windows will assume that it's swap file is on drive
|
||
|
X:. So the drive X: must be intact each time you boot Windows. If you are
|
||
|
using some additional system utilities like Norton Utilities for Windows 95,
|
||
|
then you should probably consult the online help or the manuals to keep them
|
||
|
informed of the changes in the settings, otherwise they may come out with
|
||
|
an error message.
|
||
|
|
||
|
</p>
|
||
|
|
||
|
|
||
|
|
||
|
<sect1>Back up the Total Special Sectors
|
||
|
<p>
|
||
|
<itemize>
|
||
|
|
||
|
<item>
|
||
|
<p>
|
||
|
Boot Linux, then log in as root.
|
||
|
|
||
|
|
||
|
<item>
|
||
|
<p>
|
||
|
Use the fdisk command to find the name of the partition and its size in blocks.
|
||
|
Create a symbolic link from <tt>/dev/winswap</tt> to this partition. If the
|
||
|
partition is hda7, then type:
|
||
|
<tscreen><verb>
|
||
|
# ln -s /dev/hda7 /dev/winswap
|
||
|
</verb></tscreen>
|
||
|
|
||
|
[NOTE TO PURISTS: Please use a symlink. The name of this partition is going
|
||
|
to go into several configuration files and inconsistencies could be fatal.]
|
||
|
|
||
|
|
||
|
|
||
|
<item>
|
||
|
<p>
|
||
|
Find the "Total Special Sectors" for the swap drive. These are nothing but the
|
||
|
total number of sectors required for the boot sector, FAT and root directory.
|
||
|
There are a number of ways to find this number. Simplest copy the
|
||
|
<ref id="msinfo" name="msinfo.sh"> file using your favourite editor. Give the
|
||
|
following commands at the shell prompt
|
||
|
<tscreen><verb>
|
||
|
# cp Swap-Space-HOWTO msinfo.sh
|
||
|
# chmod +x msinfo.sh
|
||
|
</verb></tscreen>
|
||
|
|
||
|
(Much easier if you use one of the editors with KDE or GNOME)
|
||
|
|
||
|
Now, open the msinfo.sh file in the editor and delete everything except the
|
||
|
msinfo.sh file in section 8. Now run this file as
|
||
|
<tscreen><verb>
|
||
|
# ./msinfo.sh /dev/winswap
|
||
|
</verb</tscreen>
|
||
|
|
||
|
The program will print the some information about the swap partition. Take note
|
||
|
at the number saying "Total special sectors", and verify that the volume label
|
||
|
says "SWAP SPACE". If it does not, reboot DOS and re-do the LABEL command.
|
||
|
|
||
|
<item>
|
||
|
<p>
|
||
|
<bf>Note:</bf> You can also find the "Total Special Sectors" using tools that
|
||
|
can display the Boot sector like the Norton Disk Editor or minfo from mtools
|
||
|
under Linux. For Norton Disk Editor, select "Boot Sector" from the Object
|
||
|
menu. Note down the following entries :
|
||
|
<tscreen><verb>
|
||
|
Reserved Sectors at beginning : r
|
||
|
FAT Copies : f
|
||
|
Sectors per FAT : s
|
||
|
Root directory entries : r
|
||
|
</verb></tscreen>
|
||
|
|
||
|
Now the "Total Special Sectors" is given by
|
||
|
|
||
|
T = r + (s * f) + (d / 16)
|
||
|
|
||
|
However, using the above program is more convienent.
|
||
|
|
||
|
Let us denote these Total Special Sectors by XXX.
|
||
|
|
||
|
|
||
|
<item>
|
||
|
<p>
|
||
|
[Optional step] Windows may occasionally leave some space on the partition,
|
||
|
even if it is told not to. Don't attempt to use this space, since it will be
|
||
|
erased any time you run Linux. If you want to avoid accidentally using it
|
||
|
(and lose data), you can create a dummy file that fills that space by using
|
||
|
the following commands:
|
||
|
<tscreen><verb>
|
||
|
mkdir /mnt
|
||
|
mount -t msdos /dev/winswap /mnt
|
||
|
dd if=/dev/zero of=/mnt/dummy.fil
|
||
|
umount /mnt
|
||
|
</verb></tscreen>
|
||
|
|
||
|
The dd command will report "No space left on device". This is exactly what
|
||
|
you want.
|
||
|
|
||
|
|
||
|
<item>
|
||
|
<p>
|
||
|
Type on the shell prompt:
|
||
|
<tscreen><verb>
|
||
|
# dd if=/dev/winswap bs=512 count=XXX | gzip -9 > /etc/winswap.gz
|
||
|
^^^
|
||
|
</verb></tscreen>
|
||
|
|
||
|
|
||
|
... where XXX is replaced with the "Total special sectors" number.
|
||
|
|
||
|
Here we are saving the Total Special Sectors in a compressed form in the file
|
||
|
/etc/winswap.gz
|
||
|
|
||
|
|
||
|
</itemize>
|
||
|
</p>
|
||
|
|
||
|
<sect1> Modify the initialization and shutdown scripts to handle our new
|
||
|
configuration
|
||
|
<p>
|
||
|
<itemize>
|
||
|
|
||
|
<item>
|
||
|
<p>
|
||
|
Now, we will modify our initalization scripts so that swap space will be
|
||
|
create on the partition each time Linux starts and the DOS/Windows special
|
||
|
sectors will be restored each time Linux shut downs.
|
||
|
|
||
|
|
||
|
|
||
|
<item>
|
||
|
<p>
|
||
|
Instead of placing the command for handling the details directly in the
|
||
|
initialization scripts, we will prepare two separate files called swapinit.sh
|
||
|
and swaphalt.sh. One sample of these files that should work under Red Hat Linux
|
||
|
is given in section at the end. You can choose to place these files under
|
||
|
any directory, preferably /etc/rc.d/init.d. Create the two files in this
|
||
|
directory and copy into then the scripts given in sections at the end. One
|
||
|
simple way is to copy this HOWTO in these files as,
|
||
|
<tscreen><verb>
|
||
|
# cp Swap-Space-HOWTO /etc/rc.d/init.d/swapinit.sh
|
||
|
# cp Swap-Space-HOWTO /etc/rc.d/init.d/swaphalt.sh
|
||
|
</verb></tscreen>
|
||
|
|
||
|
and then using your favourite editor, delete all execpt the required part. Now
|
||
|
make these file "executable" by giving the following commands
|
||
|
<tscreen><verb>
|
||
|
# chmod +x swapinit.sh
|
||
|
# chmod +x swaphalt.sh
|
||
|
</verb></tscreen>
|
||
|
|
||
|
|
||
|
<item>
|
||
|
<p>
|
||
|
Run fdisk and find the size of the swap partition in blocks. In both the above
|
||
|
files (swap????.sh) replace the YYYYY by this number.
|
||
|
|
||
|
|
||
|
|
||
|
<item>
|
||
|
<p>
|
||
|
Check the name of the shutdown file. For SysVinit this is the file listed in
|
||
|
the following line of /etc/inittab; add it if you don't have it.
|
||
|
<tscreen><verb>
|
||
|
# Runlevel 0 means shut down the system
|
||
|
l0:0:wait:/etc/brc
|
||
|
</verb></tscreen>
|
||
|
|
||
|
(Under Red Hat Linux, this file probably will be /etc/rc.d/init.d/halt)
|
||
|
If you are not in a position to find it out, browse through the /etc directory
|
||
|
and find the initialization file that contains the "swapon -a" command. Only
|
||
|
this much for now !
|
||
|
|
||
|
For the remainder of this file, I will assume the filename was
|
||
|
/etc/rc.d/init.d/halt (halt for short).
|
||
|
|
||
|
|
||
|
|
||
|
<item>
|
||
|
<p>
|
||
|
Check the name of your system initialization file. For SysVinit, this is the
|
||
|
file listed in the following line of /etc/inittab.
|
||
|
<tscreen><verb>
|
||
|
# System initialization
|
||
|
si::sysinit:/etc/rc.d/rc.sysinit
|
||
|
</verb></tscreen>
|
||
|
|
||
|
In case of your distribution, your file may be different. I assume that the
|
||
|
file is /etc/rc.d/rc.sysinit (rc.sysinit for short)
|
||
|
|
||
|
|
||
|
|
||
|
<item>
|
||
|
<p>
|
||
|
Add the following piece of code to your initialization file (rc.sysinit),
|
||
|
in place of the "swapon -a" command. You may consider not deleting but just
|
||
|
commenting the original commands so that if something goes wrong, we can
|
||
|
restore the script to it's initial state.
|
||
|
|
||
|
If your swapon is in /etc, replace /sbin/swapon with /etc/swapon.
|
||
|
If it is in /bin, replace with /bin/swapon. Do the same for mkswap.
|
||
|
<tscreen><verb>
|
||
|
# -----------------------------------------------------------------------
|
||
|
# removed by yourname
|
||
|
# Start up swapping.
|
||
|
# action "Activating swap partitions" swapon -a
|
||
|
# -----------------------------------------------------------------------
|
||
|
|
||
|
# ----------------------------------------------------------------------
|
||
|
# added by yourname
|
||
|
# Verify and initialize swap space
|
||
|
#
|
||
|
/etc/rc.d/init.d/swapinit.sh
|
||
|
# ----------------------------------------------------------------------
|
||
|
</verb></tscreen>
|
||
|
|
||
|
|
||
|
<item>
|
||
|
|
||
|
<p>
|
||
|
A simple way to paste the text is to start two Virtual Consoles. Log as a root
|
||
|
in both cases. Use your favourite editor to open this HOWTO on one console and
|
||
|
the script to be modified on other console. Now select the above code with your
|
||
|
mouse and switch to the other console. Place the cursor at the desired position
|
||
|
to paste and press the right mouse button. The selected text will be copied.
|
||
|
|
||
|
|
||
|
|
||
|
<item>
|
||
|
<p>
|
||
|
Add the following piece of code to your shutdown file (halt).Put this after
|
||
|
any command that might need swap to be in place. Normally, your halt file will
|
||
|
have the "swapoff -a" command. First replace the -a by /dev/winswap. Then
|
||
|
immediately after that section, add the following commands.
|
||
|
|
||
|
<p>
|
||
|
<em><idx>Note for RedHat Linux 6.1 : </idx></em> It seems that Red Hat Linux 6.1 halt
|
||
|
script automatically finds all the swap partitions and turns of swapping.
|
||
|
So, RedHat Linux 6.1 users need <bf>not</bf> replace the <tt>swapoff
|
||
|
$SWAPS</tt> comamnd by the <tt>swapoff -a</tt> command. In that case, just
|
||
|
add the <tt>/etc/rc.d/init.d/swaphalt.sh</tt> command to the halt file
|
||
|
|
||
|
<tscreen><verb>
|
||
|
# ------------------------------------------------------------------------
|
||
|
# Modified by yourname
|
||
|
# replaced "swapoff -a" by "swapoff /dev/winswap"
|
||
|
#
|
||
|
# Turn off swap, then unmount file systems.
|
||
|
runcmd "Turning off swap and accounting" swapoff /dev/winswap
|
||
|
[ -x /sbin/accton ] && /sbin/accton
|
||
|
# ------------------------------------------------------------------------
|
||
|
|
||
|
# ------------------------------------------------------------------------
|
||
|
# Added by yourname
|
||
|
# check swap signature and restore Windows swap info
|
||
|
/etc/rc.d/init.d/swaphalt.sh
|
||
|
# ------------------------------------------------------------------------
|
||
|
</verb></tscreen>
|
||
|
|
||
|
|
||
|
</itemize>
|
||
|
</p>
|
||
|
|
||
|
|
||
|
<sect1> Reenable swapping
|
||
|
<p>
|
||
|
Uncomment the line in /etc/fstab that you commented earlier. (Not really
|
||
|
necessary, since we now do not refer to fstab for swap partitions). Reboot
|
||
|
Linux. You should now have swapping on the new swap device.
|
||
|
|
||
|
</p>
|
||
|
|
||
|
|
||
|
|
||
|
<sect> A couple of notes
|
||
|
<p>
|
||
|
<itemize>
|
||
|
<item>
|
||
|
<p>
|
||
|
There is no need to add /dev/winswap to your /etc/fstab file. In fact, it is
|
||
|
probably wise not to do so (except possibly as a comment).
|
||
|
|
||
|
|
||
|
|
||
|
<item>
|
||
|
<p>
|
||
|
If your Linux session crashes or otherwise exits without running
|
||
|
/etc/rc.d/init.d/halt, you will need to reboot and exit Linux before swapping
|
||
|
in Windows will work. It is also possible to FORMAT X: and re-create the
|
||
|
Windows swap file. The only way around this would be to put the equivalent of
|
||
|
the /.../halt commands in the DOS AUTOEXEC.BAT file. I have tried to write
|
||
|
some programs to do this, but that turned out to be a hell lot of trouble !
|
||
|
First and foremost, simply restoring the total special sectors doesn't
|
||
|
please DOS. Along with that, it seems you need to modify some internal data
|
||
|
structures so that DOS starts recognizing your drive, otherwise DOS comes
|
||
|
out with the error message:
|
||
|
<tscreen><verb>
|
||
|
Invalid media type reading drive X:
|
||
|
Abort, Retry or Fail ?
|
||
|
</verb></tscreen>
|
||
|
Since I am not aware of many details of DOS's or Windows's handling of
|
||
|
disk drives, I think at this point, you may consult some DOS expert.
|
||
|
Of course, if you are not concerned about the booting time, then you can
|
||
|
simply add the command to perform an unconditional FORMAT of X: and then
|
||
|
restore the TSS's. May be there are some other solutions. If you are aware
|
||
|
of one, please e-mail me today !
|
||
|
|
||
|
|
||
|
<item>
|
||
|
<p>
|
||
|
One way to restore your Windows swap partition is to start Linux, disable
|
||
|
swapping as described above, and then use the following command :
|
||
|
<tscreen><verb>
|
||
|
# swapoff -a
|
||
|
# zcat /etc/winswap.gz > /dev/winswap
|
||
|
# reboot
|
||
|
</verb></tscreen>
|
||
|
|
||
|
|
||
|
<item>
|
||
|
<p>
|
||
|
<bf>Why to delete the RECYCLED folder ?</bf>
|
||
|
According to the procedure mentioned above, you must delete the <tt>RECYCLED</tt>
|
||
|
folder. This is necessary because we will be saving and restoring only the
|
||
|
sectors unto the root directory, but no further sectors. Also, we want the
|
||
|
drive X: to be restored to a "clean" state with no errors. If we don't
|
||
|
delete the <tt>RECYCLED</tt> folder, then the root directory entry is
|
||
|
restored, but the "." and ".." entries for this folder are not restored
|
||
|
and ScanDisk finds errors on the disk. To prevent this from happening, we
|
||
|
will delete the <tt>RECYCLED</tt> folder and hence only the entry for win386.swp file will be restored.
|
||
|
|
||
|
|
||
|
|
||
|
<item>
|
||
|
<p>
|
||
|
If DOS' FDISK reports the partition as a "logical DOS drive", it has a number
|
||
|
of 5 (as in /dev/hda5) or higher. It is *NOT* the partition labelled
|
||
|
"extended" which has a number of 4 or less!! If your Linux fdisk does not
|
||
|
display logical partitions, you have a broken Linux fdisk (Slackware 2.2
|
||
|
included a broken fdisk, for example.) You can try "cfdisk" if your
|
||
|
distribution has it, or you will have to get a working fdisk.
|
||
|
|
||
|
|
||
|
<item>
|
||
|
<label id="swapfile">
|
||
|
<p>
|
||
|
When you turn off swapping, Linux has to manage everything in the main
|
||
|
memory itself. If your system memory is low, say something like 16MB, then
|
||
|
some large applications that run during initialization may not be able to
|
||
|
run properly. As an example, you may get the following message during
|
||
|
initialization:
|
||
|
|
||
|
<tscreen><verb>
|
||
|
Finding module dependencies Out of memory
|
||
|
</verb></tscreen>
|
||
|
|
||
|
I don't think this will cause any problems later until you reenable
|
||
|
swapping. But it's always better to take some precautions. As you will be
|
||
|
seeing in the next section, Linux can also be configured to use a swap
|
||
|
file instead of a swap partition. So if you feel that Linux will not run
|
||
|
properly with your normal system memory, create a swap file that Linux
|
||
|
will use temporarily until swapping is restored. This swap file should
|
||
|
preferably in the root directory. Figure out the minimum size of swap space
|
||
|
required. It will probably equal to your system memory. Create a swap file
|
||
|
of that size by giving the following commands (assuming 16MB swap space):
|
||
|
|
||
|
<tscreen><verb>
|
||
|
# dd if=/dev/zero of=/swap bs=1024 count=16384
|
||
|
# mkswap /swap 16384
|
||
|
# sync
|
||
|
</verb></tscreen>
|
||
|
|
||
|
Now place the command <tt>swapon /swap</tt> just after the original
|
||
|
<tt>swapon -a</tt> command in the rc.sysinit file. Thus, now your system
|
||
|
has been configured to use swap file and hopefully there will be no Out
|
||
|
of memory errors. After having a workable swap partition (i.e after
|
||
|
following through this HOWTO completely), you can remove the <tt>swapon
|
||
|
/swap</tt> line that you added to your rc.sysinit file.
|
||
|
|
||
|
|
||
|
|
||
|
<item>
|
||
|
<p>
|
||
|
Please do not mail me unless you have checked and re-checked that you copied
|
||
|
your scripts correctly. More than half of the problems reported with this
|
||
|
Mini-HOWTO have been due to typos when copying the scripts. (Use cut-and-
|
||
|
paste if you can!). Even a spacing error can cause an error. For example, if
|
||
|
at the startup you get the messages
|
||
|
<tscreen><verb>
|
||
|
Verifying swap space...Linux signature found
|
||
|
swapon: /dev/winswap invalid argument
|
||
|
</verb></tscreen>
|
||
|
|
||
|
Then, surely there has been a typing mistake in your scripts. Please check
|
||
|
your scripts.
|
||
|
|
||
|
|
||
|
|
||
|
<item>
|
||
|
<p>
|
||
|
Sometimes, the swap partition is detected to have neither Linux nor Windows
|
||
|
info and the "No signature found" error appears. I exactly don't know why this
|
||
|
happens, but for that case, I have written the code in swap????.sh files to
|
||
|
try six times before reporting an error. Normally, the DOS signature should be
|
||
|
found on the first try, but many a times on my system it is found on iteration
|
||
|
2, 5 or not at all after 12 iterations. You may consider increasing the number
|
||
|
of tries to some value like 12 or 24, there is no harm in doing so. Once on my
|
||
|
system, the script could not detect the signatures even after 50 iterations !
|
||
|
If such a situation arises, you may consider making a symbolic link to the
|
||
|
swapinit.sh file in your root home directory, and execute it at startup.
|
||
|
<tscreen><verb>
|
||
|
# ln -s /etc/rc.d/init.d/swapinit.sh swapinit.sh
|
||
|
# ./swapinit.sh
|
||
|
</verb></tscreen>
|
||
|
|
||
|
However, what I have observed is that once the setup runs on your system for
|
||
|
some time, the appropriate signatures are always found on the first iteration.
|
||
|
|
||
|
<item>
|
||
|
<p>
|
||
|
<bf>For added reliability</bf>
|
||
|
|
||
|
Your Linux Box runs something very important, or your system memory is less
|
||
|
so that without swapping, your applications just start collapsing ? You have
|
||
|
set up the swap partition to be shared by Windows. But many a times, your
|
||
|
system is unable to detect the proper signatures after exhaustive probing
|
||
|
and so disables any swapping partitions. <bf>At your own risk</bf>, you may
|
||
|
consider removing the signature checking logic, but here is a more
|
||
|
approachable solution.
|
||
|
|
||
|
First refer to the <ref id="swapfile" name="previous point"> and create
|
||
|
a swap file in the Linux root directory, with the name /swap. Keep it's size
|
||
|
according to your requirement. Now open the swapinit.sh file and modify the
|
||
|
last <tt>if</tt> statement as follows:
|
||
|
|
||
|
<tscreen><verb>
|
||
|
if [ $activated -ne 1 ] ; then
|
||
|
echo "Swap signature not found after $loopcount tries"
|
||
|
echo "Activating swap file"
|
||
|
swapon /swap
|
||
|
exit 1
|
||
|
fi
|
||
|
</verb></tscreen>
|
||
|
|
||
|
Thus if we find that swap partition lacks appropriate swap signatures, then
|
||
|
we enable the swap file. Since the swap file is on the root partition and
|
||
|
the Linux Kernel refuses to proceed until it mounts the root file system,
|
||
|
you are safely assured that the swap file will always be successfully
|
||
|
activated. Instead of creating and keeping the swap file and wasting disk
|
||
|
space, you may also modify the code to create the swap file <em>on the
|
||
|
fly</em>.
|
||
|
|
||
|
|
||
|
<item>
|
||
|
<p>
|
||
|
<bf>Saving more disk space</bf>
|
||
|
As we saw, Linux and Windows can share their swap spaces. But Window doesn't
|
||
|
really require as large a swap file as your Linux swap partition ? Then you
|
||
|
can have some free space on the swap partition (keep the Windows swap file
|
||
|
size smaller than the swap partition size). Swapping for Windows based
|
||
|
applications is managed by Windows itself. But many DOS programs like
|
||
|
Turbo C++ Compiler, Norton DOS etc. also manage their own swap files. In
|
||
|
that case it is possible to configure these programs so that they create
|
||
|
their swap files in the swap partition instead of their default location.
|
||
|
This will increase your usable disk space. Also, most of these program
|
||
|
forget to delete the swap files they created, leading to a large used disk
|
||
|
space. But with this setup, every time you shut down Linux, you get a clean
|
||
|
swap partition, saving your time in finding and deleting these swap files.
|
||
|
For example, you can tell Turbo C++ to swap on drive say E: by invoking it
|
||
|
as
|
||
|
<tscreen><verb>
|
||
|
C:\CLAN>TC /RE
|
||
|
</verb></tscreen>
|
||
|
For Norton DOS, set the variable in the NDOS.INI file as,
|
||
|
<tscreen><verb>
|
||
|
Swapping = E:\
|
||
|
</verb></tscreen>
|
||
|
Many other programs may rely on the <tt>TEMP</tt> or <tt>TMP</tt>
|
||
|
environment variables to decide where they will swap. In that case you may
|
||
|
set these variables appropriately in your AUTOEXEC.BAT file.
|
||
|
|
||
|
|
||
|
<item>
|
||
|
<p>
|
||
|
<bf> What if the swap partition is a FAT32 ? </bf>
|
||
|
No, you can't have a swap partition with a FAT32 file system. First of all,
|
||
|
Linux can use a maximum of 128MB of swap space on a single swap partition.
|
||
|
Thus, if your swap partition is larger than 128MB, you are wasting your disk
|
||
|
space. And Windows will refuse to convert a partition of 128MB into a FAT32
|
||
|
file system.
|
||
|
|
||
|
|
||
|
|
||
|
<item>
|
||
|
<p>
|
||
|
<bf>The new style swap space </bf>
|
||
|
Linux knows about two styles of swap areas, the old style and the new style.
|
||
|
By default, you will be using the old style swap space with a signature
|
||
|
"SWAP-SPACE". If you want to use the new style swap space, then first of all
|
||
|
change "SWAP-SPACE" in all the above scripts to "SWAPSPACE2". Also add an
|
||
|
option -v1 in the mkswap command in the swapinit.sh script, as follows
|
||
|
<tscreen><verb>
|
||
|
/sbin/mkswap -v1 /dev/winswap YYYYY
|
||
|
</verb></tscreen>
|
||
|
|
||
|
Also, run the following commands from the shell prompt :
|
||
|
<tscreen><verb>
|
||
|
# swapoff /dev/winswap
|
||
|
# mkswap -v1 /dev/winswap YYYYY
|
||
|
# swapon /dev/winswap
|
||
|
</verb></tscreen>
|
||
|
|
||
|
It seems that under new style swap space, your usable swap partition can be as
|
||
|
large as 2GB on i386 platforms. This means that you can now have a swap
|
||
|
partition larger than 512MB which Windows can format as a FAT32 partition .
|
||
|
Someone help on how do we save the "Total Special Sectors" under a FAT32
|
||
|
partition.
|
||
|
|
||
|
<item>
|
||
|
<p>
|
||
|
<bf>For users of WINE</bf>
|
||
|
<url url = "http://www.winehq.com" name="WINE"> is a program which allows
|
||
|
running Microsoft Windows programs on Linux. If you are using WINE on a system
|
||
|
that has been set up to share swap partition, then when running a Windows program
|
||
|
a <tt>win386.swp</tt> file of about 8kb is created in your Windows folder. This is
|
||
|
because the swap file on X: is not available at that time. You can safely delete
|
||
|
this file once you finish running your Windows programs.
|
||
|
|
||
|
</itemize>
|
||
|
</p>
|
||
|
|
||
|
<sect> What are we exactly doing ?
|
||
|
<p>
|
||
|
<itemize>
|
||
|
|
||
|
<item>
|
||
|
<p>
|
||
|
Both Windows and Linux use swap space. When an OS is shut down, the contents of
|
||
|
the swap space are just garbage, the OS doesn't bother about what is in it.
|
||
|
Now what is the point in devoting a 60MB partition for swap space to Linux and
|
||
|
about 32MB of disk space separately to Windows when only one of them is going
|
||
|
to run at a time (It is possible to run both Linux and Windows at the same
|
||
|
time, thanks to VMWare. For more information, see <url url="http://www.vmware.com"
|
||
|
name = "VMWare website">). So we want Linux and Windows to share the same hard
|
||
|
disk space as swap space.
|
||
|
|
||
|
|
||
|
|
||
|
<item>
|
||
|
<p>
|
||
|
The problem is that Linux uses a partition as a swap space and Windows uses a
|
||
|
file as a swap space. ( Although it is possible to create a swap file for
|
||
|
Linux, it is not recommended. See <em><idx>"Linux Installation and Getting
|
||
|
Started"</idx></em> by Matt Welsh). Now if Linux uses the same partition on
|
||
|
which Windows stores it's swap file, it will overwrite the boot sector, FAT
|
||
|
and other data tables that Windows assumes to exist on every drive. Thus,
|
||
|
Windows will not be in a position to find the swap file on startup and will
|
||
|
create the win386.swp file in the windows directory. Thus, even if by chance,
|
||
|
your Linux crashes, Windows will be in a position to start. In such a case
|
||
|
( with Windows swap file in the Windows directory), just restore the
|
||
|
DOS/Windows swap info by restarting Linux and the start Windows. Now Windows
|
||
|
will be using the swap file on drive X: so you can safely delete the
|
||
|
win386.swp file in the windows directory.
|
||
|
|
||
|
|
||
|
|
||
|
<item>
|
||
|
<p>
|
||
|
The remedy is to store those critical data tables once on the Linux partition
|
||
|
in some file. Then every time Linux starts, check whether the swap space was
|
||
|
last used by Linux or Windows (using the label you gave to your partition).
|
||
|
If it was Linux, just enable swapping else first make a swap partition on the
|
||
|
X: drive using "mkswap /dev/winswap" and then enable swapping.
|
||
|
|
||
|
|
||
|
<item>
|
||
|
<p>
|
||
|
When you shut down Linux, it is important to restore the swap partition to the
|
||
|
DOS format, so that Windows can start properly. For that purpose we add the
|
||
|
<tscreen><verb>
|
||
|
/bin/zcat /etc/winswap.gz > /dev/winswap
|
||
|
</verb></tscreen>
|
||
|
|
||
|
command to the halt file.
|
||
|
|
||
|
</itemize>
|
||
|
</p>
|
||
|
|
||
|
<sect> The swapinit.sh script
|
||
|
<label id="swapinit">
|
||
|
<p>
|
||
|
This shell script initializes the swap space on the partition. The code for
|
||
|
signature detection has been repeated 6 times because many a times the
|
||
|
signature is properly detected only on the second or the third try.
|
||
|
|
||
|
(Adapted from the original Swap-Space-HOWTO by H. Peter Anvin)
|
||
|
<tscreen><verb>
|
||
|
#!/bin/sh
|
||
|
#
|
||
|
# swapinit.sh - activate the swap partition
|
||
|
#
|
||
|
# written by Rahul U. Joshi
|
||
|
# Verify and initialize swap space
|
||
|
#
|
||
|
|
||
|
echo -n 'Verifying swap space... '
|
||
|
|
||
|
loopcount=0
|
||
|
|
||
|
# flag to indicate whether the partition has been activated or not
|
||
|
activated=0
|
||
|
|
||
|
# check for signatures 6 times before giving up
|
||
|
while [ $loopcount -lt 6 ]
|
||
|
do
|
||
|
|
||
|
if [ "`/bin/dd 2>/dev/null if=/dev/winswap bs=1 count=10 skip=4086`" = 'SWAP-SPACE' ]; then
|
||
|
echo "Linux signature found, iteration $loopcount"
|
||
|
echo "Activating swap partitions"
|
||
|
swapon /dev/winswap
|
||
|
activated=1
|
||
|
break
|
||
|
|
||
|
elif [ "`/bin/dd 2>/dev/null if=/dev/winswap bs=1 count=11 skip=43`" = 'SWAP SPACE ' ]; then
|
||
|
echo "DOS signature found, iteration $loopcount"
|
||
|
echo "Making swap partition"
|
||
|
mkswap /dev/winswap YYYYY
|
||
|
echo "Activating swap partitions"
|
||
|
swapon /dev/winswap
|
||
|
activated=1
|
||
|
break
|
||
|
|
||
|
else
|
||
|
let loopcount=loopcount+1
|
||
|
fi
|
||
|
|
||
|
done
|
||
|
|
||
|
|
||
|
if [ $activated -ne 1 ] ; then
|
||
|
echo "Swap signature not found after $loopcount tries"
|
||
|
echo "No swapping partitions activated"
|
||
|
exit 1
|
||
|
fi
|
||
|
</verb></tscreen>
|
||
|
</p>
|
||
|
|
||
|
|
||
|
|
||
|
<sect> The swaphalt.sh script
|
||
|
<label id="swaphalt">
|
||
|
<p>
|
||
|
This script first checks the Linux swap signature and then restores the
|
||
|
Windows file system on it.
|
||
|
|
||
|
(Adapted from the original Swap-Space-HOWTO by H. Peter Anvin)
|
||
|
|
||
|
<tscreen><verb>
|
||
|
#!/bin/sh
|
||
|
#
|
||
|
# swaphalt.sh This file is executed through the /etc/rc.d/init.d/halt
|
||
|
# script after swapping and accounting has been turned off.
|
||
|
#
|
||
|
# Author: Rahul U. Joshi
|
||
|
#
|
||
|
|
||
|
# check swap partition signature and restore Windows swap info
|
||
|
|
||
|
loopcount=0
|
||
|
|
||
|
# flag to indicate whether the swap info has been restored or not
|
||
|
restored=0
|
||
|
|
||
|
# check for swap signature 3 times before giving up
|
||
|
while [ $loopcount -lt 3 ]
|
||
|
do
|
||
|
|
||
|
if [ "`/bin/dd 2>/dev/null if=/dev/winswap bs=1 count=10 skip=4086`" = 'SWAP-SPACE' ]; then
|
||
|
echo "Restoring DOS/Windows swap info , iteration $loopcount"
|
||
|
/bin/zcat /etc/winswap.gz > /dev/winswap
|
||
|
restored=1
|
||
|
break
|
||
|
else
|
||
|
loopcount=loopcount+1
|
||
|
fi
|
||
|
|
||
|
done
|
||
|
|
||
|
if [ $restored -ne 1 ] ; then
|
||
|
echo "Swap signature not found after $loopcount tries"
|
||
|
echo "Skipping restoring"
|
||
|
fi
|
||
|
|
||
|
</verb></tscreen>
|
||
|
</p>
|
||
|
|
||
|
|
||
|
<sect> The msinfo.sh script
|
||
|
<label id="msinfo">
|
||
|
<p>
|
||
|
This shell script analyses the boot sector of the given partition and displays
|
||
|
some information along with the "Total Special Sectors" in a message box. It
|
||
|
assumes that the filesystem on the given partition is a FAT16. If not, it will
|
||
|
print an error message and exit. Invoke it as
|
||
|
<tscreen><verb>
|
||
|
|
||
|
# msinfo <partition name>
|
||
|
|
||
|
</verb></tscreen>
|
||
|
|
||
|
To run this script, you will need the "dialog" program that displays dialog
|
||
|
boxes. You can get it from <url url="http://sunsite.unc.edu/pub/Linux/utils/shell"
|
||
|
name = "here">.
|
||
|
|
||
|
<tscreen><verb>
|
||
|
#!/bin/sh
|
||
|
#
|
||
|
# msinfo.sh This shell script displays the boot sector of the
|
||
|
# given partition.
|
||
|
#
|
||
|
# Author: Rahul U. Joshi
|
||
|
#
|
||
|
# Modifications Removed the use of expr and replaced it by the let
|
||
|
# command.
|
||
|
#
|
||
|
# ------------------------------------------------------------------------
|
||
|
# This program is a free software, you can redistribute it and/or modify
|
||
|
# it under the eterms of the GNU General Public Liscence as published by
|
||
|
# the Free Software Foundation; either version 2 or (at your option) any
|
||
|
# later version.
|
||
|
#
|
||
|
# This program is being distributed in the hope that it will be useful,
|
||
|
# but WITHOUT ANY WARRANTY without even the implied warranty of
|
||
|
# MERCHANTIBILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
|
||
|
# Public Liscence for more details.
|
||
|
# -------------------------------------------------------------------------
|
||
|
|
||
|
|
||
|
# check for command line arguments
|
||
|
if [ $# -ne 1 ]; then
|
||
|
echo "Usage: msinfo <partition name>"
|
||
|
exit 1
|
||
|
fi
|
||
|
|
||
|
# check whether the input name is a block device
|
||
|
if [ ! -b $1 ]; then
|
||
|
echo "msinfo: $1 is not a block device"
|
||
|
exit 1
|
||
|
fi
|
||
|
|
||
|
# create two temporary files for use
|
||
|
TMPFILE=`mktemp -q /tmp/$0.XXXXXX`
|
||
|
if [ $? -ne 0 ]; then
|
||
|
echo "msinfo: Can't create temp file, exiting..."
|
||
|
exit 1
|
||
|
fi
|
||
|
|
||
|
TXTFILE=`mktemp -q /tmp/$0.XXXXXX`
|
||
|
if [ $? -ne 0 ]; then
|
||
|
echo "msinfo: Can't create temp file, exiting..."
|
||
|
rm -f $TMPFILE
|
||
|
exit 1
|
||
|
fi
|
||
|
|
||
|
backtitle="`printf "%78s" "msinfo, Information about FAT16 filesystem -- Rahul Joshi"`"
|
||
|
|
||
|
dialog --title "Boot sector of $1" --backtitle "$back_title" \
|
||
|
--infobox "\nAnalysing boot sector for $1\nPlease wait..." 14 60
|
||
|
|
||
|
# truncate TXTFILE to zero length
|
||
|
echo > $TXTFILE
|
||
|
|
||
|
# get Formatting DOS version
|
||
|
dd 2>/dev/null if=$1 bs=1 count=8 skip=3 | dd 2>/dev/null of=$TMPFILE
|
||
|
printf >>$TXTFILE "%30s : %s\n" "Formatting DOS version" "`cat $TMPFILE`"
|
||
|
|
||
|
|
||
|
# get file system
|
||
|
dd 2>/dev/null if=$1 bs=1 count=8 skip=54 | dd 2>/dev/null of=$TMPFILE
|
||
|
printf >>$TXTFILE "%30s : %s\n" "Filesystem" "`cat $TMPFILE`"
|
||
|
|
||
|
# check if filesystem in a FAT16
|
||
|
if [ "`cat $TMPFILE`" != "FAT16 " ]; then
|
||
|
dialog --title "Boot sector of $1" --backtitle "$back_title" \
|
||
|
--infobox "\nCan't find a FAT16 filesystem on $1" 14 60
|
||
|
exit 2
|
||
|
fi
|
||
|
|
||
|
# get volume label in boot sector
|
||
|
dd 2>/dev/null if=$1 bs=1 count=11 skip=43 | dd 2>/dev/null of=$TMPFILE
|
||
|
printf >>$TXTFILE "%30s : %s\n" "Volume label in boot sector" "`cat $TMPFILE`"
|
||
|
|
||
|
|
||
|
# get Sector size
|
||
|
dd 2>/dev/null if=$1 bs=1 count=2 skip=11| od -An -tdS | dd 2>/dev/null of=$TMPFILE
|
||
|
printf >>$TXTFILE "%30s : %d\n" "Sector size" `cat $TMPFILE`
|
||
|
sector_size=`cat $TMPFILE`
|
||
|
|
||
|
|
||
|
# get Reserved sectors
|
||
|
dd 2>/dev/null if=$1 bs=1 count=2 skip=14| od -An -tdS | dd 2>/dev/null of=$TMPFILE
|
||
|
printf >>$TXTFILE "%30s : %d\n" " Reserved sectors" `cat $TMPFILE`
|
||
|
reserved_sectors=`cat $TMPFILE`
|
||
|
|
||
|
|
||
|
# get FAT sectors
|
||
|
dd 2>/dev/null if=$1 bs=1 count=1 skip=16| od -An -tdS | dd 2>/dev/null of=$TMPFILE
|
||
|
fat_count=`cat $TMPFILE`
|
||
|
|
||
|
dd 2>/dev/null if=$1 bs=1 count=2 skip=22| od -An -tdS | dd 2>/dev/null of=$TMPFILE
|
||
|
sectors_per_fat=`cat $TMPFILE`
|
||
|
|
||
|
# calculate the no of sectors allocated for FAT's
|
||
|
let fat_sectors=fat_count*sectors_per_fat
|
||
|
|
||
|
printf >>$TXTFILE "%30s : %u (%u x %u) \n" "FAT sectors" "$fat_sectors" \
|
||
|
"$fat_count" "$sectors_per_fat"
|
||
|
|
||
|
|
||
|
# get root directory sectors
|
||
|
dd 2>/dev/null if=$1 bs=1 count=2 skip=17| od -An -tdS | dd 2>/dev/null of=$TMPFILE
|
||
|
root_sectors=`cat $TMPFILE`
|
||
|
|
||
|
# calculate the no of sectors allocated for root directory
|
||
|
let root_sectors=root_sectors*32/sector_size
|
||
|
|
||
|
printf >>$TXTFILE "%30s : %u\n" "Root directory sectors" "$root_sectors"
|
||
|
|
||
|
|
||
|
# get Total special sectors
|
||
|
let total=reserved_sectors+fat_sectors+root_sectors
|
||
|
printf >>$TXTFILE "%30s : %u\n" "Total special sectors" "$total"
|
||
|
|
||
|
|
||
|
# display the information
|
||
|
dialog --title "Boot sector of $1" --backtitle "$back_title" --msgbox "`cat $TXTFILE`" 14 60
|
||
|
|
||
|
# delete temporary files
|
||
|
rm -f $TMPFILE
|
||
|
rm -f $TXTFILE
|
||
|
|
||
|
# end of msinfo.sh
|
||
|
</verb></tscreen>
|
||
|
</p>
|
||
|
|
||
|
|
||
|
<sect> The original msinfo file
|
||
|
<p>
|
||
|
Here is the msinfo file required to find the "Total Special Sectors". It was
|
||
|
included by the original author of this HOWTO in an encoded form. First copy
|
||
|
the text from the line "begin 755 msinfo.gz" to the line "end" into a
|
||
|
temporary file say temp.uu. Then uudecode this file, and finally gunzip to get
|
||
|
msinfo file.
|
||
|
<tscreen><verb>
|
||
|
# uudecode temp.uu
|
||
|
# gunzip msinfo.gz
|
||
|
</verb></tscreen>
|
||
|
|
||
|
Now run the program using the command
|
||
|
<tscreen><verb>
|
||
|
# ./msinfo /dev/winswap
|
||
|
</verb></tscreen>
|
||
|
The program displays the boot sector information for given partition as well
|
||
|
as the "Total Special Sectors" for the drive.
|
||
|
<tscreen><verb>
|
||
|
begin 755 msinfo.gz
|
||
|
M'XL(`$$YNRT"`Y557TQ;51@_MW]HZ0AM'"$U-.28W([..>84%1%D2QH>',9*
|
||
|
M2S&ero;VC);V=FV]T*;WWBD+1I)K'YH;DOJF#YH80GPR^J""D"R8-K('MS2;#Q*S
|
||
|
M%Y,E-P&592A$V:[?.;?M"FP/?DG/G^_[?7_Z_3G7PL313TT(?8P0<J"CI':8
|
||
|
M$5H^#:=5<KT^MQ`^UAQ1O*QUH0<.]B7S/FC[U!98Y;))]<*N^AG"^LB((J%E
|
||
|
MAFIM[A9U0O`;%:*7N#[L%G!_-IH34V(J,WUZ.CK%O6I#N4DTE,E-144Q-7T)
|
||
|
M>]_PX\M<3@!`'ZZ26[`-I7A.F!%$;JK.;21`!#.\-,5A/CK)\=B3FL:3F8PH
|
||
|
M<#$QDSO91Q%^>L%"Z@KW*"-NR3;""5SN,A?'NI[0=P0Q=#[P&&$5@3UNZ3VW
|
||
|
M=-(V`NYQ/)6CX)DC2F`KD!&ero;C/!:R7"Q%]L-6`8'D+=]8T*^$V8@RR\;5\P9(
|
||
|
M^;\&ero;T:F]E`Q`EI,_6YHCZBT#BJ09M0VV9!:XVKLF]0NX%'Z4R];\W](3A-%J
|
||
|
MI:`_&12!>@33QC0S'V8]?O5+0`;3UC23K)!"?@97N8R#:29MF/>R)PI>UJF)
|
||
|
MK%/-4QR39OSJE8,8MHZ)UC#`?1ZX'N!ZU`L'X;@.?X["C<1DUT%,9QW32C''
|
||
|
M"<98PQR#8#=(L'>96NQWR/4W1@>H3\'!OC3,MMN_"[,=A1OVK^XEH($[$S^H
|
||
|
MY@28=MB78-$/`=8)(L=\P*$5*I_LS@)_G7!=\Z9V@F"``Y$XQM[T!T>(WHNU
|
||
|
M/T9CH)YIZI("&9ZK32AR=DTN/QNZ."&7?27H_<(=_^=Q"U1N3Y.>!-E`$BY(
|
||
|
M;(4ZG)/[\_0F_54HY7\5[<!33)\2M%:Y(.THX_N%K?%2L9&ero;(O=4>8F^@IV9(
|
||
|
M,<HEDU:17T'23M)GA#ANW-<F'J5-]>6!G2;BU+YN)@<RL.JBIFD4[:<###UG
|
||
|
MO3Z77WO?L?O+@@G\+(-<"X&ero;QT"&ero;#_N7@_\2;JGAEF&ero;U1`JR#ZCD/Z]7HJ'ZH
|
||
|
M09_JNAZGJ^N?X5.39_AXMY!!?3@6G>X2,9^)QG%\!IZ@5`SSJ>EWN!SN>HCK
|
||
|
MLJ%F08R*J5B4YV=T0-R&ero;J#UYJW>4#"7/#D,0/GG`0ZI@__`;6->]K!>C[<GD
|
||
|
M31/IQP>:!B]D?DT,*<;Y6=9Y]3:P][^W`?+>8F(1!*ZY7B1:BN=@D_XY9?0I
|
||
|
M'?ZT0=V@BBWIIV$47#Y@7-,9Q>0<*=7;NMW-NS2>9#_X3V)8()?A$;!`ALRW
|
||
|
M#&\%RO_^@9F6TP<]'M8J@'AFA"[JM]0(WCQ!`[.826!F&ero;A@HG4JWU5R_KKL&
|
||
|
M9GNQF$;J[?NZ\YUZ?B].C,OEWI*\94J`:6LB?U,RK^2.([0QRQK(W!D2[K5M
|
||
|
M,G>&0B7A'K03F"'17*&ero;L#9XU@+U2L9K4-GCIG(K(NE:SM,>SM,?;X,T:&ero;U6,
|
||
|
MT./E%NAUTNE_$,^E(A0M!B7K[D'>X6'\FC25Q3W=+V3YLR^CXJW.S0>#54*#
|
||
|
M#ZE^AI+N-35^_>![U4!?@VQ%ET<L!BC>MC5"\GH->"T6'4/2NS>((N0,DT>_
|
||
|
9K6^!S%65KRS`,`,UVB43\!]-BKG]B`<``#5"
|
||
|
`
|
||
|
end
|
||
|
</verb></tscreen>
|
||
|
|
||
|
<sect>Acknowledgements, feedback and dedication
|
||
|
<p>
|
||
|
This Mini-HOWTO has been largely derived from the Swap-Space Mini HOWTO by
|
||
|
<bf>H. Peter Anvin</bf>. I have added the Windows 95/98 specific details as
|
||
|
well as a few Red Hat Linux specific details. The msinfo program given in the
|
||
|
original HOWTO didn't work on my Red Hat Linux 6 system, so I created a similar
|
||
|
program. However, I have also included the original msinfo program. Thanks to all
|
||
|
those <bf>great people involved with the development of Linux</bf>,to the
|
||
|
people at <bf>Red Hat</bf> for giving a great Linux distribution and to <bf>
|
||
|
Sanjiv Guha</bf>, one of the co-authors of "Red Hat Linux 6 Unleashed" from
|
||
|
Techmedia for guidance about shell programming. Thanks also to <bf>Matt Welsh
|
||
|
</bf>,<bf> Greg Hankins</bf> and <bf>Eric S. Raymond</bf>, the authors of
|
||
|
SGML-Tool's Users Guide, which helped me in converting the document in SGML
|
||
|
format. Thanks are also to <bf>Peter Norton</bf> and <bf>John Goodman</bf>
|
||
|
for there venerable "Peter Norton's Inside the PC", which helped me about
|
||
|
DOS file system structure. Finally, thanks to <bf>PC Quest Linux Project</bf>
|
||
|
for bringing out Linux CDROMS frequently.
|
||
|
|
||
|
I rely on you, the readers, to make this HOWTO useful. If you have any
|
||
|
suggestions, comments, corrections, requests, flames, etc., feel free to
|
||
|
contact me. Right now, I have no internet access, but still you contact me
|
||
|
in case of questions at my <url url="mailto:jurahul@hotmail.com" name="Hotmail">
|
||
|
account (Hey! Don't blame me for using a Microsoft service. Hotmail was
|
||
|
created by our Indian guy Sabeer Bhatia). May be someone from you local place may also come to your rescue.If
|
||
|
you find my account unoperational and your problem is indeed important, you may
|
||
|
mail me at <url url="mailto:amitanatu@sprynet.com" name="amitanatu@sprynet.com">.
|
||
|
|
||
|
Finally, I would like to dedicate this work to <bf>Robert Lafore</bf>, the
|
||
|
author of excellent books "C programming using Turbo C++" and "Object
|
||
|
Oriented Programming using Turbo C++".
|
||
|
|
||
|
Enjoy Linux,
|
||
|
|
||
|
Rahul :-)
|
||
|
|
||
|
</p>
|
||
|
|
||
|
</article>
|
||
|
|
||
|
<!--
|
||
|
TODO :
|
||
|
1. Add FAT32 logic (unlikely that anyone uses a swap partition as large
|
||
|
as 512 MB.)
|
||
|
2. Create programs to handling the restoring of TSS's from DOS
|
||
|
AUTOEXEC.BAT file
|
||
|
-- >
|
||
|
|