分享
 
 
 

Linux和Windows共享交换区

王朝system·作者佚名  2008-05-18
窄屏简体版  字體: |||超大  

1. 前言

现在,越来越多的人在一台使用Linux 和 Windows. 这应该说是Linux的胜利. 我们知

道, Linux 要使用交换分区,

Windows 要使用交换文件。如果一台PIII, 有192M 内存,我们分配给Linux 192M 交换

区, Windows 2000 至少要

200M. 那么,我们要用近400M硬盘空间。如果交换区更大,浪费就更可观了。

由于两个系统的交换区都只是运行时的临时数据,所以,我们采用动态修改分区信息的方法

来达到共享目的.

2. 方法简介

1). 备份Windows 分区信息。

2). 当启动Linux时, 将该分区做成Linux 交换区,并将其激活。

3) 当Linux 关闭时,将该分区重新变成Windows 交换区。

3. 具体步骤

1). 分区

Fdisk, 只分主分区, 不分扩展分区

2). 安装 Windows.

3). 安装Linux (占一个主分区)

4). 在Linux 下, 分扩展分区)

5). 设定Linux交换区(假定/dev/hda10)

6). 建立winswap 设备

ln -s /dev/hda10 /dev/winswap

7). 启动Linux, 关闭交换区

# swapoff -a

8). 从文件安装表中删除该分区

vi /etc/fstab

注释掉该行 (/dev/hda10)

9). 将该分区该成 FAT16 或其他 DOS 分区.

10). 启动 Windows

a). 格式化该分区

b). 将系统的交换文件设在该分区.

11). 启动 Linux, 计算Total Special Sectors

公式:

T = r + (s * f) + (d / 16)

参数:

Reserved Sectors at beginning : r

FAT Copies : f

Sectors per FAT : s

Root directory entries : d

参见: msinfo.sh

注解: 可以运行 msinfo.sh 来获得.

# msinfo.sh /dev/hda10

12). 备份Windows 分区信息

# dd if=/dev/winswap bs=512 count=XXX | gzip -9 > /etc/winswap.gz

这里, XXX = T

14). 编写启动, 退出脚本, 并把它们放在 /etc/rc.d/xxx.

可用 grep -nr * | grep swapon (或 swapoff) 来找系统激活和关闭交换区, 将它们

替换称我们

的脚本)

我们在附录中提供了启动和关闭的脚本.

4. 附加说明

1. 本文使用的是FAT16, 如果使用NTFS 或其它, 必须修改脚本.

2. mkswap /dev/winswap 377496 (这个值需要修改, 依照你的分区大小)

5. 参考资料:

Linux HOWTO: Swap-space

6. 附录 -- 相应的脚本

1. msinfo.sh 脚本

#!/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.

# check for command line arguments

if [ $# -ne 1 ]; then

echo "Usage: msinfo "

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

back_title="`printf "%78s" "msinfo, Information about FAT16 filesystem --

Rahul

Joshi"`"

dialog --title "Boot sector of $1" --backtitle "$back_title" --infobox

"

Analysing boot sector for $1

Please 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

" "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

" "Filesystem" "`cat $TMPFILE`"

# check if filesystem in a FAT16

if [ "`cat $TMPFILE`" != "FAT16 " ]; then

dialog --title "Boot sector of $1" --backtitle "$back_title" --infobox

"

Can'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

" "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

" "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

" " 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)

" "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

" "Root directory sectors" "$root_sectors"

# get Total special sectors

let total=reserved_sectors+fat_sectors+root_sectors

printf >>$TXTFILE "%30s : %u

" "Total special sectors" "$total"

# display the information in a message box

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

2. swapinit.sh

#!/bin/sh

#

# /etc/rc.d/init.d/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`" =

'SWAPSPACE2' ]; 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=5 skip=54`" =

'FAT16' ]; then

echo "DOS signature found, iteration $loopcount"

echo "Making swap partition"

mkswap /dev/winswap 377496

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

3. swaphalt.sh

#!/bin/sh

#

# /etc/rc.d/init.d/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`" =

'SWAPSPACE2' ]; 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=5 skip=54`" =

'FAT16' ]; then

echo "DOS signature found, iteration $loopcount"

echo "Making swap partition"

mkswap /dev/winswap 377496

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

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有