1397 lines
44 KiB
Plaintext
1397 lines
44 KiB
Plaintext
|
Linux Swap Space Mini-HOWTO
|
|||
|
Rahul Sundaram rahulsundaram@yahoo.co.in <mailto:rahulsun<75>
|
|||
|
daram AT yahoo DOT co DOT in>
|
|||
|
v1.6, 2002-12-27
|
|||
|
|
|||
|
This Linux Mini-HOWTO describes how to share your Linux swap partition
|
|||
|
with Windows.
|
|||
|
______________________________________________________________________
|
|||
|
|
|||
|
Table of Contents
|
|||
|
|
|||
|
|
|||
|
1. Introduction
|
|||
|
|
|||
|
2. What you need
|
|||
|
|
|||
|
3. Recent Changes and versions
|
|||
|
|
|||
|
4. Administrative
|
|||
|
|
|||
|
4.1 Copyright
|
|||
|
4.2 Disclaimer
|
|||
|
|
|||
|
5. Before you begin
|
|||
|
|
|||
|
6. The Procedure
|
|||
|
|
|||
|
6.1 Turn off swapping and create a DOS partition
|
|||
|
6.2 Tell Windows the location of the new swap file
|
|||
|
6.2.1 (BF
|
|||
|
6.2.2 (BF
|
|||
|
6.3 Back up the Total Special Sectors
|
|||
|
6.4 Modify the initialization and shutdown scripts to handle our new configuration
|
|||
|
6.5 Reenable swapping
|
|||
|
|
|||
|
7. A couple of notes
|
|||
|
|
|||
|
8. What are we exactly doing ?
|
|||
|
|
|||
|
9. The swapinit.sh script
|
|||
|
|
|||
|
10. The swaphalt.sh script
|
|||
|
|
|||
|
11. The msinfo.sh script
|
|||
|
|
|||
|
12. The original msinfo file
|
|||
|
|
|||
|
13. Acknowledgements, feedback and dedication
|
|||
|
|
|||
|
|
|||
|
|
|||
|
______________________________________________________________________
|
|||
|
|
|||
|
1. Introduction
|
|||
|
|
|||
|
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.
|
|||
|
|
|||
|
|
|||
|
|
|||
|
2. What you need
|
|||
|
|
|||
|
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.
|
|||
|
|
|||
|
|
|||
|
|
|||
|
1. MS-DOS 5.0 or newer and MS-Windows 3.1/3.11 OR MS-Windows 95/98
|
|||
|
|
|||
|
2. 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.)
|
|||
|
|
|||
|
3. Recent Changes and versions
|
|||
|
|
|||
|
|
|||
|
<20> Version 1.3 -- Written by H. Peter Anvin, and was not maintained
|
|||
|
from 15 Jan 1998.
|
|||
|
|
|||
|
<20> Version 1.4 -- Based on v1.3, but added more details.Rahul U. Joshi
|
|||
|
started maintainance
|
|||
|
|
|||
|
<20> Version 1.42 -- Deleted the recovery section for v1.4 users an v1.4
|
|||
|
never actually appeared on the LDP website.
|
|||
|
|
|||
|
<20> Version 1.5 -- Rahul U.Joshi stopped maintainance on 18 January
|
|||
|
2000.Currently being maintained by Rahul Sundaram.
|
|||
|
|
|||
|
<20> Version 1.6 -- Renamed from Linux Swap space to this one.
|
|||
|
|
|||
|
Modifications by Rahul U. Joshi
|
|||
|
|
|||
|
Date: 26 Nov 1999
|
|||
|
|
|||
|
|
|||
|
<20> Added Windows 95/98 specific details.
|
|||
|
|
|||
|
<20> Added Red Hat Linux specific details.
|
|||
|
|
|||
|
<20> Modified the msinfo program.
|
|||
|
|
|||
|
<20> Added sections 5 to 12.
|
|||
|
|
|||
|
<20> Completely revamped the "Procedure" section to make it more
|
|||
|
understandable.
|
|||
|
|
|||
|
<20> Split up the swap initialization and halt into two shell scripts.
|
|||
|
|
|||
|
<20> Modified the scripts to handle signature verification more than
|
|||
|
once.
|
|||
|
|
|||
|
<20> Added details about new type swap areas.
|
|||
|
|
|||
|
<20> Added more reliable schemes.
|
|||
|
|
|||
|
|
|||
|
|
|||
|
4. Administrative
|
|||
|
|
|||
|
4.1. Copyright
|
|||
|
|
|||
|
This mini-HOWTO is Copyright Rahul Sundaram.All rights reserved.This
|
|||
|
document is licensed under the Linux Documentation Project license
|
|||
|
<http://tldp.org/copyright.html>.I welcome any kind of commercial
|
|||
|
distrubution but I would like to receive information regarding this.I
|
|||
|
would also help anyone willing to translate this document.If you
|
|||
|
require any exceptions to the licensing terms please contact me Rahul
|
|||
|
Sundaram <mailto:rahulsundaram AT yahoo DOT co DOT in>. The latest
|
|||
|
version of this document is always available at the Linux
|
|||
|
Documentation website at <http://tldp.org/HOWTO/mini/Automount.html>.
|
|||
|
|
|||
|
|
|||
|
4.2. Disclaimer
|
|||
|
|
|||
|
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.
|
|||
|
|
|||
|
|
|||
|
|
|||
|
5. Before you begin
|
|||
|
|
|||
|
This is not 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.
|
|||
|
|
|||
|
|
|||
|
6. The Procedure
|
|||
|
|
|||
|
|
|||
|
NOTE: 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.
|
|||
|
|
|||
|
|
|||
|
|
|||
|
6.1. Turn off swapping and create a DOS partition
|
|||
|
|
|||
|
|
|||
|
<20>
|
|||
|
|
|||
|
Boot Linux. Turn off swapping by editing the /etc/fstab file and
|
|||
|
commenting the line that describes your swap partition.
|
|||
|
|
|||
|
|
|||
|
<20>
|
|||
|
|
|||
|
Using fdisk under Linux, delete the swap partition in order to
|
|||
|
create free space on the disk.
|
|||
|
|
|||
|
|
|||
|
<20>
|
|||
|
|
|||
|
|
|||
|
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.
|
|||
|
|
|||
|
|
|||
|
<20>
|
|||
|
|
|||
|
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"
|
|||
|
|
|||
|
|
|||
|
<20>
|
|||
|
|
|||
|
Format this partition using the DOS FORMAT command.
|
|||
|
|
|||
|
|
|||
|
|
|||
|
C:\>FORMAT X:
|
|||
|
|
|||
|
|
|||
|
|
|||
|
<20>
|
|||
|
|
|||
|
|
|||
|
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.]
|
|||
|
|
|||
|
|
|||
|
C:\>LABEL X:
|
|||
|
C:\>DIR X:
|
|||
|
|
|||
|
|
|||
|
|
|||
|
<20>
|
|||
|
|
|||
|
|
|||
|
At this stage, you have a DOS partition ready for use for swapping.
|
|||
|
|
|||
|
|
|||
|
|
|||
|
6.2. Tell Windows the location of the new swap file
|
|||
|
|
|||
|
6.2.1. For Windows 3.1 users
|
|||
|
|
|||
|
|
|||
|
<20>
|
|||
|
|
|||
|
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.
|
|||
|
|
|||
|
|
|||
|
|
|||
|
<20>
|
|||
|
|
|||
|
Exit Windows.
|
|||
|
|
|||
|
|
|||
|
|
|||
|
6.2.2. For Windows 95/98 users
|
|||
|
|
|||
|
|
|||
|
<20>
|
|||
|
|
|||
|
|
|||
|
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.
|
|||
|
|
|||
|
|
|||
|
|
|||
|
<20>
|
|||
|
|
|||
|
|
|||
|
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.
|
|||
|
|
|||
|
|
|||
|
<20>
|
|||
|
|
|||
|
Now that you are not maintaining the Recycle Bin for drive X:,
|
|||
|
ideally the RECYCLED 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:
|
|||
|
|
|||
|
|
|||
|
C:\>X:
|
|||
|
X:\>ATTRIB -R -H -S RECYCLED
|
|||
|
X:\>DELTREE RECYCLED
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Now you have drive X: containing only win386.swp. You can verify this
|
|||
|
using the various options for the dircommand. This does not mean that
|
|||
|
the RECYCLED folder will not be there on drive X:. When Windows boots
|
|||
|
up and finds that there is no RECYCLED 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 RECYCLED folder, please e-mail me.
|
|||
|
|
|||
|
|
|||
|
|
|||
|
<20>
|
|||
|
Disk Cleanup troubles you ?
|
|||
|
|
|||
|
|
|||
|
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.
|
|||
|
|
|||
|
|
|||
|
|
|||
|
>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.
|
|||
|
|
|||
|
|
|||
|
6.3. Back up the Total Special Sectors
|
|||
|
|
|||
|
|
|||
|
<20>
|
|||
|
|
|||
|
|
|||
|
Boot Linux, then log in as root.
|
|||
|
|
|||
|
|
|||
|
|
|||
|
<20>
|
|||
|
|
|||
|
|
|||
|
Use the fdisk command to find the name of the partition and its
|
|||
|
size in blocks. Create a symbolic link from /dev/winswap to this
|
|||
|
partition. If the partition is hda7, then type:
|
|||
|
|
|||
|
|
|||
|
# ln -s /dev/hda7 /dev/winswap
|
|||
|
|
|||
|
|
|||
|
|
|||
|
[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.]
|
|||
|
|
|||
|
|
|||
|
|
|||
|
<20>
|
|||
|
|
|||
|
|
|||
|
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 ``msinfo.sh'' file using your
|
|||
|
favourite editor. Give the following commands at the shell prompt
|
|||
|
|
|||
|
|
|||
|
|
|||
|
# cp Swap-Space-HOWTO msinfo.sh
|
|||
|
# chmod +x msinfo.sh
|
|||
|
|
|||
|
|
|||
|
|
|||
|
(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
|
|||
|
|
|||
|
|
|||
|
|
|||
|
# ./msinfo.sh /dev/winswap
|
|||
|
|
|||
|
|
|||
|
|
|||
|
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.
|
|||
|
|
|||
|
|
|||
|
<20>
|
|||
|
|
|||
|
|
|||
|
Note: 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
|
|||
|
:
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Reserved Sectors at beginning : r
|
|||
|
FAT Copies : f
|
|||
|
Sectors per FAT : s
|
|||
|
Root directory entries : r
|
|||
|
|
|||
|
|
|||
|
|
|||
|
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.
|
|||
|
|
|||
|
|
|||
|
|
|||
|
<20>
|
|||
|
|
|||
|
|
|||
|
[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:
|
|||
|
|
|||
|
|
|||
|
mkdir /mnt
|
|||
|
mount -t msdos /dev/winswap /mnt
|
|||
|
dd if=/dev/zero of=/mnt/dummy.fil
|
|||
|
umount /mnt
|
|||
|
|
|||
|
|
|||
|
|
|||
|
The dd command will report "No space left on device". This is exactly
|
|||
|
what you want.
|
|||
|
|
|||
|
|
|||
|
|
|||
|
<20>
|
|||
|
|
|||
|
|
|||
|
Type on the shell prompt:
|
|||
|
|
|||
|
|
|||
|
|
|||
|
# dd if=/dev/winswap bs=512 count=XXX | gzip -9 > /etc/winswap.gz
|
|||
|
^^^
|
|||
|
|
|||
|
|
|||
|
|
|||
|
... 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
|
|||
|
|
|||
|
|
|||
|
|
|||
|
6.4. Modify the initialization and shutdown scripts to handle our new
|
|||
|
configuration
|
|||
|
|
|||
|
|
|||
|
<20>
|
|||
|
|
|||
|
|
|||
|
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.
|
|||
|
|
|||
|
|
|||
|
|
|||
|
<20>
|
|||
|
|
|||
|
|
|||
|
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,
|
|||
|
|
|||
|
|
|||
|
|
|||
|
# cp Swap-Space-HOWTO /etc/rc.d/init.d/swapinit.sh
|
|||
|
# cp Swap-Space-HOWTO /etc/rc.d/init.d/swaphalt.sh
|
|||
|
|
|||
|
|
|||
|
|
|||
|
and then using your favourite editor, delete all execpt the required
|
|||
|
part. Now make these file "executable" by giving the following
|
|||
|
commands
|
|||
|
|
|||
|
|
|||
|
# chmod +x swapinit.sh
|
|||
|
# chmod +x swaphalt.sh
|
|||
|
|
|||
|
|
|||
|
|
|||
|
<20>
|
|||
|
|
|||
|
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.
|
|||
|
|
|||
|
|
|||
|
|
|||
|
<20>
|
|||
|
|
|||
|
|
|||
|
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.
|
|||
|
|
|||
|
|
|||
|
|
|||
|
# Runlevel 0 means shut down the system
|
|||
|
l0:0:wait:/etc/brc
|
|||
|
|
|||
|
|
|||
|
|
|||
|
(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).
|
|||
|
|
|||
|
|
|||
|
|
|||
|
<20>
|
|||
|
|
|||
|
Check the name of your system initialization file. For SysVinit,
|
|||
|
this is the file listed in the following line of /etc/inittab.
|
|||
|
|
|||
|
|
|||
|
|
|||
|
# System initialization
|
|||
|
si::sysinit:/etc/rc.d/rc.sysinit
|
|||
|
|
|||
|
|
|||
|
|
|||
|
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)
|
|||
|
|
|||
|
|
|||
|
|
|||
|
<20>
|
|||
|
|
|||
|
|
|||
|
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.
|
|||
|
|
|||
|
|
|||
|
|
|||
|
# -----------------------------------------------------------------------
|
|||
|
# 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
|
|||
|
# ----------------------------------------------------------------------
|
|||
|
|
|||
|
|
|||
|
|
|||
|
<20>
|
|||
|
|
|||
|
|
|||
|
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.
|
|||
|
|
|||
|
|
|||
|
|
|||
|
<20>
|
|||
|
|
|||
|
|
|||
|
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.
|
|||
|
|
|||
|
|
|||
|
Note for RedHat Linux 6.1 : 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 not replace the swapoff
|
|||
|
$SWAPS comamnd by the swapoff -a command. In that case, just add
|
|||
|
the /etc/rc.d/init.d/swaphalt.sh command to the halt file
|
|||
|
|
|||
|
|
|||
|
|
|||
|
# ------------------------------------------------------------------------
|
|||
|
# 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
|
|||
|
# ------------------------------------------------------------------------
|
|||
|
|
|||
|
|
|||
|
|
|||
|
6.5. Reenable swapping
|
|||
|
|
|||
|
|
|||
|
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.
|
|||
|
|
|||
|
|
|||
|
|
|||
|
7. A couple of notes
|
|||
|
|
|||
|
|
|||
|
|
|||
|
<20>
|
|||
|
|
|||
|
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).
|
|||
|
|
|||
|
|
|||
|
|
|||
|
<20>
|
|||
|
|
|||
|
|
|||
|
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:
|
|||
|
|
|||
|
|
|||
|
Invalid media type reading drive X:
|
|||
|
Abort, Retry or Fail ?
|
|||
|
|
|||
|
|
|||
|
|
|||
|
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 !
|
|||
|
|
|||
|
|
|||
|
|
|||
|
<20>
|
|||
|
|
|||
|
|
|||
|
One way to restore your Windows swap partition is to start Linux,
|
|||
|
disable swapping as described above, and then use the following
|
|||
|
command :
|
|||
|
|
|||
|
|
|||
|
|
|||
|
# swapoff -a
|
|||
|
# zcat /etc/winswap.gz > /dev/winswap
|
|||
|
# reboot
|
|||
|
|
|||
|
|
|||
|
|
|||
|
<20>
|
|||
|
|
|||
|
Why to delete the RECYCLED folder ? According to the procedure
|
|||
|
mentioned above, you must delete the RECYCLED 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 RECYCLED 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 RECYCLED folder and hence only
|
|||
|
the entry for win386.swp file will be restored.
|
|||
|
|
|||
|
|
|||
|
|
|||
|
<20>
|
|||
|
|
|||
|
|
|||
|
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.
|
|||
|
|
|||
|
|
|||
|
|
|||
|
<20>
|
|||
|
|
|||
|
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:
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Finding module dependencies Out of memory
|
|||
|
|
|||
|
|
|||
|
|
|||
|
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):
|
|||
|
|
|||
|
|
|||
|
|
|||
|
# dd if=/dev/zero of=/swap bs=1024 count=16384
|
|||
|
# mkswap /swap 16384
|
|||
|
# sync
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Now place the command swapon /swap just after the original swapon -a
|
|||
|
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 swapon
|
|||
|
/swap line that you added to your rc.sysinit file.
|
|||
|
<20>
|
|||
|
|
|||
|
|
|||
|
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
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Verifying swap space...Linux signature found
|
|||
|
swapon: /dev/winswap invalid argument
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Then, surely there has been a typing mistake in your scripts. Please
|
|||
|
check your scripts.
|
|||
|
|
|||
|
|
|||
|
|
|||
|
<20>
|
|||
|
|
|||
|
|
|||
|
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.
|
|||
|
|
|||
|
|
|||
|
|
|||
|
# ln -s /etc/rc.d/init.d/swapinit.sh swapinit.sh
|
|||
|
# ./swapinit.sh
|
|||
|
|
|||
|
|
|||
|
|
|||
|
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.
|
|||
|
|
|||
|
|
|||
|
<20>
|
|||
|
|
|||
|
For added reliability
|
|||
|
|
|||
|
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. At your own risk, you may consider removing
|
|||
|
the signature checking logic, but here is a more approachable
|
|||
|
solution.
|
|||
|
|
|||
|
First refer to the ``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 if statement as follows:
|
|||
|
|
|||
|
|
|||
|
|
|||
|
if [ $activated -ne 1 ] ; then
|
|||
|
echo "Swap signature not found after $loopcount tries"
|
|||
|
echo "Activating swap file"
|
|||
|
swapon /swap
|
|||
|
exit 1
|
|||
|
fi
|
|||
|
|
|||
|
|
|||
|
|
|||
|
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 on the fly.
|
|||
|
|
|||
|
|
|||
|
|
|||
|
<20>
|
|||
|
|
|||
|
Saving more disk space 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
|
|||
|
|
|||
|
|
|||
|
C:\CLAN>TC /RE
|
|||
|
|
|||
|
|
|||
|
|
|||
|
For Norton DOS, set the variable in the NDOS.INI file as,
|
|||
|
|
|||
|
|
|||
|
Swapping = E:\
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Many other programs may rely on the TEMP or TMP environment variables
|
|||
|
to decide where they will swap. In that case you may set these vari<72>
|
|||
|
ables appropriately in your AUTOEXEC.BAT file.
|
|||
|
|
|||
|
|
|||
|
|
|||
|
<20>
|
|||
|
|
|||
|
What if the swap partition is a FAT32 ? 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.
|
|||
|
|
|||
|
|
|||
|
|
|||
|
<20>
|
|||
|
|
|||
|
The new style swap space 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
|
|||
|
|
|||
|
|
|||
|
|
|||
|
/sbin/mkswap -v1 /dev/winswap YYYYY
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Also, run the following commands from the shell prompt :
|
|||
|
|
|||
|
|
|||
|
|
|||
|
# swapoff /dev/winswap
|
|||
|
# mkswap -v1 /dev/winswap YYYYY
|
|||
|
# swapon /dev/winswap
|
|||
|
|
|||
|
|
|||
|
|
|||
|
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.
|
|||
|
|
|||
|
|
|||
|
<20>
|
|||
|
|
|||
|
For users of WINE WINE <http://www.winehq.com> 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 win386.swp 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.
|
|||
|
|
|||
|
|
|||
|
|
|||
|
8. What are we exactly doing ?
|
|||
|
|
|||
|
|
|||
|
<20>
|
|||
|
|
|||
|
|
|||
|
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 VMWare website
|
|||
|
<http://www.vmware.com>). So we want Linux and Windows to share the
|
|||
|
same hard disk space as swap space.
|
|||
|
|
|||
|
|
|||
|
|
|||
|
<20>
|
|||
|
|
|||
|
|
|||
|
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 "Linux
|
|||
|
Installation and Getting Started" 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.
|
|||
|
|
|||
|
|
|||
|
|
|||
|
<20>
|
|||
|
|
|||
|
|
|||
|
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.
|
|||
|
|
|||
|
|
|||
|
|
|||
|
<20>
|
|||
|
|
|||
|
|
|||
|
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
|
|||
|
|
|||
|
|
|||
|
|
|||
|
/bin/zcat /etc/winswap.gz > /dev/winswap
|
|||
|
|
|||
|
|
|||
|
|
|||
|
command to the halt file.
|
|||
|
|
|||
|
|
|||
|
|
|||
|
9. The swapinit.sh script
|
|||
|
|
|||
|
|
|||
|
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)
|
|||
|
|
|||
|
|
|||
|
|
|||
|
#!/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
|
|||
|
|
|||
|
|
|||
|
|
|||
|
10. The swaphalt.sh script
|
|||
|
|
|||
|
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)
|
|||
|
|
|||
|
|
|||
|
|
|||
|
#!/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
|
|||
|
|
|||
|
|
|||
|
|
|||
|
11. The msinfo.sh script
|
|||
|
|
|||
|
|
|||
|
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
|
|||
|
|
|||
|
|
|||
|
|
|||
|
# msinfo <partition name>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
To run this script, you will need the "dialog" program that displays
|
|||
|
dialog boxes. You can get it from here
|
|||
|
<http://sunsite.unc.edu/pub/Linux/utils/shell>.
|
|||
|
|
|||
|
|
|||
|
|
|||
|
#!/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
|
|||
|
|
|||
|
|
|||
|
|
|||
|
12. The original msinfo file
|
|||
|
|
|||
|
|
|||
|
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.
|
|||
|
|
|||
|
|
|||
|
|
|||
|
# uudecode temp.uu
|
|||
|
# gunzip msinfo.gz
|
|||
|
|
|||
|
|
|||
|
|
|||
|
Now run the program using the command
|
|||
|
|
|||
|
|
|||
|
|
|||
|
# ./msinfo /dev/winswap
|
|||
|
|
|||
|
|
|||
|
|
|||
|
The program displays the boot sector information for given partition
|
|||
|
as well as the "Total Special Sectors" for the drive.
|
|||
|
|
|||
|
|
|||
|
|
|||
|
begin 755 msinfo.gz
|
|||
|
M'XL(`$$YNRT"`Y557TQ;51@_MW]HZ0AM'"$U-.28W([..>84%1%D2QH>',9*
|
|||
|
M2S&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!&C/!:R7"Q%]L-6`8'D+=]8T*^$V8@RR\;5\P9(
|
|||
|
M^;\&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&(O=4>8F^@IV9(
|
|||
|
M,<HEDU:17T'23M)GA#ANW-<F'J5-]>6!G2;BU+YN)@<RL.JBIFD4[:<###UG
|
|||
|
MO3Z77WO?L?O+@@G\+(-<"X&QT"&#_N7@_\2;JGAEF&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&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&A@HG4JWU5R_KKL&
|
|||
|
M9GNQF$;J[?NZ\YUZ?B].C,OEWI*\94J`:6LB?U,RK^2.([0QRQK(W!D2[K5M
|
|||
|
M,G>&0B7A'K03F"'17*&L#9XU@+U2L9K4-GCIG(K(NE:SM,>SM,?;X,T:&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
|
|||
|
|
|||
|
|
|||
|
|
|||
|
13. Acknowledgements, feedback and dedication
|
|||
|
|
|||
|
This Mini-HOWTO has been largely derived from the Swap-Space Mini
|
|||
|
HOWTO by H. Peter Anvin. Rahul.U.Joshi 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 the Joshi's
|
|||
|
Red Hat Linux 6 system, so he created a similar program. However, He
|
|||
|
has also included the original msinfo program.It is now maintained by
|
|||
|
Rahul Sundaram.
|
|||
|
|
|||
|
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 Rahul Sundaram <mailto:rahulsundaram AT yahoo DOT co DOT
|
|||
|
in>. I dedicate this document to my friends.
|
|||
|
|
|||
|
|
|||
|
|