作者 主題: 有方法可以自動完成fdisk嗎?  (閱讀 10518 次)

0 會員 與 1 訪客 正在閱讀本文。

andrew

  • 實習板主
  • 懷疑的國中生
  • **
  • 文章數: 69
    • 檢視個人資料
有方法可以自動完成fdisk嗎?
« 於: 2005-07-14 10:14 »
我想寫個shell script, 開機時偵測硬碟後
要自動分割和格式化最後要掛載到/

目前問題卡在分割, 我只知道fdisk指令,
但是他是交談模式的, 假設我只有一顆hda要分割,
而且全部切割成hda1, 可以有方法一行指令就自動完成嗎?
find /my_brain type sleepy -exec rm -rf {} \;

thyme

  • 老人組
  • 俺是博士!
  • *****
  • 文章數: 1281
    • 檢視個人資料
有方法可以自動完成fdisk嗎?
« 回覆 #1 於: 2005-07-14 10:26 »
man sfdisk
這我也是找了好久 -_-

netman

  • 管理員
  • 俺是博士!
  • *****
  • 文章數: 17466
    • 檢視個人資料
    • http://www.study-area.org
有方法可以自動完成fdisk嗎?
« 回覆 #2 於: 2005-07-14 12:28 »
對! sfdisk 很好用...
若你已有設計好的 fstab , 一下子就做好了...  ^_^

andrew

  • 實習板主
  • 懷疑的國中生
  • **
  • 文章數: 69
    • 檢視個人資料
有方法可以自動完成fdisk嗎?
« 回覆 #3 於: 2005-07-14 17:51 »
引述: "thyme"
man sfdisk
這我也是找了好久 -_-


thyme前輩您好:
很感謝你幾乎real-time的回答(超快的)

我查了一下資料, 最常用的方式是做備份:
ex: 先導出hda磁片的分區訊息
代碼: [選擇]
#sfdisk -d /dev/hda > partitions.txt
檔案的內容大概會像是:

代碼: [選擇]
# partition table of /dev/hda
unit: sectors
/dev/hda1 : start=       63, size=   160587, Id=83, bootable
/dev/hda2 : start=   160650, size= 24579450, Id=83
/dev/hda3 : start= 24740100, size= 14329980, Id=83
/dev/hda4 : start= 39070080, size=  1060290, Id= f
/dev/hda5 : start= 39070143, size=  1044162, Id=82


再使用hda的磁片分析訊息在hdc上建立分區
代碼: [選擇]
#sfdisk /dev/hdc < partitions.txt


我的需求只是很單純的想把整顆硬碟切割成一個partition
所以我要應用的話, 是不是只要修改這個partitions.txt檔
修改start, size和id,
然後在執行shell script時, 再掃完硬碟後讓他執行
#sfdisk /dev/hdc < partitions.txt

只是我目前想到一個問題, 如果硬碟空間事先不知道的話,
或是可能會變動的話...那應該怎麼處理呢?
find /my_brain type sleepy -exec rm -rf {} \;

hata

  • 懷疑的國中生
  • **
  • 文章數: 32
    • 檢視個人資料
有方法可以自動完成fdisk嗎?
« 回覆 #4 於: 2005-07-14 20:14 »
我之前寫的程式片段,可以參考看看:

代碼: [選擇]

s=`fdisk -l -u /dev/hda 2> /dev/null | grep heads`
  C=`echo "$s" | awk '{print $5}'`
  H=`echo "$s" | awk '{print $1}'`
  S=`echo "$s" | awk '{print $3}

代碼: [選擇]

echo -e "
  d\n1\nd\2\nd\n3\nd\n4\n
  n\np\n1\n\n$C1
  n\np\n2\n\n$C2
  n\np\n3\n\n\n
  a\n1\n
  w\nq" | fdisk /dev/hda
\bye

kenduest

  • 酷!學園 學長們
  • 俺是博士!
  • *****
  • 文章數: 3675
    • 檢視個人資料
    • http://kenduest.sayya.org
Re: 有方法可以自動完成fdisk嗎?
« 回覆 #5 於: 2005-07-14 20:17 »
引述: "andrew"
我想寫個shell script, 開機時偵測硬碟後
要自動分割和格式化最後要掛載到/

目前問題卡在分割, 我只知道fdisk指令,
但是他是交談模式的, 假設我只有一顆hda要分割,
而且全部切割成hda1, 可以有方法一行指令就自動完成嗎?


把你的 fdisk 操作按鍵命令打成一個檔案,比方是 foo.txt。

然後執行 fdisk /dev/hda < foo.txt 即可。

foo.txt 像是:

代碼: [選擇]

n
p


a
w


==
I am kenduest - 小州

my website: http://kenduest.sayya.org/

小張張

  • 可愛的小學生
  • *
  • 文章數: 22
    • 檢視個人資料
    • http://www.leadcom.com.tw
有方法可以自動完成fdisk嗎?
« 回覆 #6 於: 2005-09-29 09:23 »
#check Hard Disk devices and filesystems
#check SCSI HDD or IDE HDD
cat /proc/partitions | grep sda >&/dev/null
[ $? = "0" ] && hdisk=sda || {
  cat /proc/partitions | grep hdc >&/dev/null
  [ $? = "0" ] && hdisk=hdc || {
    cat /proc/partitions | grep hdd >&/dev/null
    [ $? = "0" ] && hdisk=hdd
    }
  }

H=`dmesg | grep $hdisk | grep CHS | awk '{print $8}' | sed 's/\//\ /g' \
| sed 's/\=/\ /g' | sed 's/\,/\ /g' | awk '{print $3}'`

S=`dmesg | grep $hdisk | grep CHS | awk '{print $8}' | sed 's/\//\ /g' \
| sed 's/\=/\ /g' | sed 's/\,/\ /g' | awk '{print $4}'`

etc_size=$((100*2000/$H/$S))
swap_size=$((500*2000/$H/$S))
etc_start=$(($swap_size))
home_start=$(($etc_start+$etc_size))

## Erease all partitions
sfdisk /dev/$hdisk <<EOF>&/dev/null
;
EOF
sleep 1

## Create new partitions
sfdisk /dev/$hdisk <<EOF>&/dev/null
0,$swap_size,82
$etc_start,$etc_size
$home_start
EOF