Forum

Yampiz Forum

Sharing let knowledge Spreaded, Reading let spirits growth, Creative let culture extended, Let us
  • 禁止廣告文
  • 知識傳播
  • 閱讀
  • 心靈成長
  • 創作
  • 文化傳承
Dictionary / PC / Linux 討論版 /

Linux 和 Windows 共享交換區

New Subject
Random
Previous
Next
|
    Linux 和 Windows 共享交換區

    ???
    本文出自:http://www.linuxforum.net 作者: 馬軍 (Arthur Ma)

        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
        "\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 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
    • Keywords : TMPFILE, winswap, loopcount, count, TXTFILE, activated, msinfo, sectors, printf, Linux, FAT16, sector, partition, signature, partitions, found, swapon, space, root_sectors, check
    00
    2009-01-21T08:53:53+0000


    • Now, you can post comments by Facebook Account when your Yampiz account was logout or unvariable. whatever, we suggest to post comment by Yampiz Account to get more bounds to join new events of Heyxu
    Comment
     
    Verify
    Comment

    Facebook Page

    QR-Code and APP Launcher

    User Guide
    This Webpage

    In those service tabs, "Scan QRCode, in mobile device" or "Click the button, in this device" to open webpage or APP-related operations.
    QRCode
    • Auto Platform
      For better browsing experience, it will auto detects your device to display webpage.
    • Bug Report
      Tell us about the idea, problem and errors you found.
    • Comodo Secure
      The sensitive data transmission adopts by SSL-2048 authenticated encryption.
    • Copyright
      © 2009 YamPiz Digital Inc. & Jaby Group. All rights reserved.
    • Revised Version
      V2.2.552
      05 Dec 2025 (GMT+8)