懶的更新到blogger了

本站2010年10月以後的,都更新到google docs上了:
連結在這裡

2006/05/25

[心得]硬碟的備份與還原

最近一直在找一些自由軟體,也在尋找有沒有類似GHOST的自由軟體,

先是在自由軟體技術交流網找到了一套 g4u (意思是 GHOST for UNIX)
http://freesf.tnc.edu.tw/modules/news/article.php?storyid=1630
它的方式是可以利用ftp,將本機的硬碟資料完整的傳到網路上的ftp server上,
也可以反過來還原(當然它也可以針對本機 硬碟/分割區 對拷)
試用了一下,其實是不錯的,因為它用 dd 去存取整顆硬碟的資料,
所以不管你硬碟上是什麼樣的檔案系統(ext2,fat32,ntfs.....)、作業系統 都沒差,
反正就從硬碟頭到硬碟尾完完整整的拷成一個檔案(可壓縮),再上傳。
但是相對的,所花的時間就多(因為它不能判硬碟的某部份有沒有資料,
而且有些硬碟上檔案看似刪除了,其實還留在原地(除非真的清空)。

為了時間與空間的考量,還是找一個認識不同檔案系統的軟體好了,

網路上找到一個叫 Partimage 的東西(應該是很出名吧,不過我是找了才知道的)
它可以處理大部份的檔案系統
stable:ext2fs/ext3fs,Reiser3,FAT16/32,HPFS,JFS,XFS
beta:UFS(Unix File System),HFS(MacOS File System)
experimental:NTFS (←網站上說,ntfs只要能成功做成image的,就能成功還原)
不過,它只能在 Linux/Unix 環境跑,但我想備分/還原的是windows分割區,不想為此重灌,
還好網路上也有人做了一片系統救援Live-CD,裡面已經包含Partimage了,真是太好了。

SystemRescueCd(Partimage網站上推薦這一個)
下載後燒錄後,是一片可開機的linux環境的救援光碟片,
裡面包含了許多工具(但我主要是用partimage,還有開機時可以打 freedos 可以進入freedos),
網路部份只要網卡設定好,ftp smbmount 都是可以用的,

使用SystemRescueCd裡的partimage做備份和還原
*光碟開機,直接按Enter進入就可以了(也可以先按F2,F3..看其他的選項設定)
*會停在設定鍵盤的畫面,我都是選英文鍵盤--41
*設定網卡
+開完機後,如果有DHCP的話,應該網卡已經設好了,先用 ifconifg 看一下
+如果沒有DHCP,手動設定參考如下:
-如果要手動設定以eth0為例, ifconfig eth0 192.168.0.xxx netmask 255.255.255.0
-如果會連到其他網段,請記得,route add default gw 192.168.0.xxx (其中xxx為gateway ip)
*mount放image的磁碟機,我是做一個叫 mnt 的目錄啦 (mkdir mnt)
+較新的版本好像可以用 ftpfs...但我用起來怪怪的,故不使用
+usb硬碟(接上去用dmesg應該可以看到它抓到什麼名字,我用的版本抓到 /dev/uba1)
-mount -t vfat /dev/uba1 mnt/
+網路上的芳鄰(假設分享名稱是abc)
-smbmount //192.168.0.xxx/abc mnt/ [ -o username=YourWindowsAccount ]
*這時 mnt 裡就可以 存/讀 硬碟image檔
*cd mnt 後,直接執行 partimage ,再來看是要備份或還原,就照該程式的說明了
因為有簡單的操作介面,應該是看得懂才對。
如果是作成 image 檔,假設檔名叫 hda1.gz,每600MB分割一個檔,則會生成
hda1.gz.000 , hda1.gz.001, hda1.gz.002.......
還原時,要打完整的第一個檔名,如 hda1.gz.000,接著它會自動依序處理 001 , 002....

Partimage也可以當server,讓10台電腦連進來做 備份/還原 ,一些記事如下
*程式名稱 partimaged
*該server的所在電腦,主要是提供 存/讀 images
*使用者名稱要加入 /etc/partimaged/partimagedusers (權限600)
*上述使用者名稱必須是系統的使用者(在/etc/passwd裡有名字的)
(不過,我執行遠端還原時也沒問我帳號密碼啊……是因為我用root嗎?)
*預設port是4025
*最好在「放images」的目錄裡才執行 partimaged ,因為它會把執行的目錄當成遠端連進來的預設目錄(算是為了方便起見)

題外話:關於備份 MBR 順便也做了實驗 (怕以後忘了,還是寫一下吧)
dd if=/dev/hda of=mbr count=1 bs=512
以上指令可以把hda(第一顆ide硬碟)前512bytes備份成一個叫 mbr 的檔案
反過來,如果要把mbr檔案寫回硬碟的指令是
dd if=mbr of=/dev/hda

後來網路上查了一些資料,發現其實mbr只有前 446 bytes
再來的 64 bytes是硬碟分割表... 446+64=510..那剩下兩個bytes呢?
是 55 AA 代表結束吧!?

做了簡單的實驗,先把分割狀態用紙筆抄起來,然後
dd if=/dev/zero of=/dev/hda count=1 bs=512 (小朋友不要學喔)
好,當然是毀了(連最後的 55 AA 都沒有 ^^),
用 fdisk /dev/hda 時會告訴你分割表有問題,它可以修復,ok就讓它修吧,
順便手動填入剛才抄下來的分割狀態,重新開機,退出光碟
………………慘了,c槽開不了機(我有設定可開機,果然mbr是不能亂玩的)
再把SystemRescueCd放進去重新開機
開機時進入 freedos,然後下 fdisk /mbr (早就想玩這個指令了)
再重開機,還是先進SystemRescueCd,把前512bytes拷成檔案來看
發現分割表還在…而前446bytes也有一些東西在裡面了,
所以,dos裡的 fdisk /mbr 這個動作,應該是把mbr(前446)還原掉。
(我以前一直以為這個動作會連分割表都清除……原來不會啊……呵)
再重新開機,退出光碟,又可以正常的從 c槽開機了(原來mbr要正常才會去找c開機)
--
g4u網站:http://www.feyrer.de/g4u/
Partimage網站:http://www.partimage.org/
SystemRescueCd網站:http://www.sysresccd.org/

2006/05/21

[心得]apache 使用 VirtualHost

參考:
http://httpd.apache.org/docs/2.2/en/vhosts/

大概是說 Virtual Host 有兩種方法,
1是 IP-based......也就是以 ip 去分辨網站 ─ 如果電腦有多個 ip 可用這個方法
2.是name-based......也就是以 網站名稱 去辨識 ─ 如果只有一個 ip 可是想架多個網站,可用此方法
(例如 url.to.siteX 和 rul.to.siteY 都指向同一ip,但用siteX連上和用siteY連上,會導到不同網頁
,不過先決條件是 DNS
那邊要設定好了…這是當然的^^ )

我個人遇到的情況多屬於第2種,所以就練習這一方法。

*安裝
今天忽然心血來潮,想自己編一個 apache 出來 (以前都用現成的)
就去抓了原始碼,(2.2.2版)
./configure --help
之後,發現有很多的選項,不過我只想改安裝路徑,所以就
./configure --prefix=$HOME/apache2
等…等…等…一小段時間後
make
再等…等…等…一小段時間後
make install
小等……ok,成功了。

*設定
在 conf/ 裡有 httpd.conf ,大概都有預設值了,把 #ServerName 的 # 拿掉,改成
ServerName localhost

*啟動
就馬上開始吧
bin/apachectl start
瀏覽器連上去……http://localhost/……It works!......感覺真好 ^^

*設定 VirtualHost
這個版本有 VirtualHost的範本,放在 conf/extra/httpd-vhosts.conf
不過要使用這個檔,要先把 conf/httpd.conf 裡面的 #Include conf/extra/htpd-vhosts.conf 的 # 拿掉

因為我只拿本機測試,所以名稱(/etc/hosts)設定如下
127.0.0.1 localhost
127.0.0.1 local8000 (為何用8000,只是忽然想到,就用了)
127.0.0.1 local8001

localhost 的網站在 /path/to/apache/htdocs/ (預設值)
local8000 的網站要在 /path/to/apache/htdocs8000/
local8000 的網站要在 /path/to/apache/htdocs8001/

設定檔(conf/extra/httpd-vhosts.conf)如下:

# - - - - - 開始 httpd-vhosts.conf - - - - -

#↓這裡應該也可以用 127.0.0.1:80 ,不過它預設用 *:80 ,我就沒改了
NameVirtualHost *:80

#本來這個我沒有打,結果連localhost反而跑到8000那一台去了,所以補上來
#也就是說,當啟用了NameVirturlHost後,就一定會從VirtualHost裡找…???
#它的目錄相關設定在 httpd.conf 裡,我沒有特別修改,也沒加到這裡
#如果是用 localhost 進來的人,就進到 htdocs

ServerAdmin root@localhost
DocumentRoot /path/to/apache/htdocs
ServerName localhost


#如果是用 local8000 進來的人,就進到 htdocs8000

ServerAdmin root@local8000
DocumentRoot /path/to/apache/htdocs8000
ServerName local8000
ErrorLog logs/vhost_8000_log
CustomLog logs/vhost_8000_log common

Options Indexes FollowSymLinks
AllowOverride None
Order allow,deny
Allow from all



#如果是用 local8001 進來的人,就進到 htdocs8001

ServerAdmin root@local8001
DocumentRoot /path/to/apache/htdocs8001
ServerName local8001
ErrorLog logs/vhost_8001_log
CustomLog logs/vhost_8001_log common

Options Indexes FollowSymLinks
AllowOverride None
Order allow,deny
Allow from all



# - - - - - 結束 httpd-vhosts.conf - - - - -

第一次設定時,忘了加上 相關選項,結果被拒絕存取了

*測試
http://localhost/ → It works! (原來的index.html檔)
http://local8000/ → It works!8000 (我修改過的 index.html檔)
http://local8001/ → It works!8001 (我修改過的 index.html檔)
感覺真好~

2006/05/12

[心得]windows XP 的 命令提示字元 (MS-DOS模式)中 顯示中文

在 winXP 中,使用 cmd (命令提示字元) 後,
dir可以看到中文檔名,但如果執行了 dos 的程式後,馬上跳成亂碼
(原本 codepage 950 執行程式後變成 437 ,而且不能修改的樣子)

網路上查到有人用「英文版的 XP + 中文語言包」可以顯示中文,但不太可能去試吧
因為我跟本沒看過英文版的 XP ....我出去買也都只看到中文版 XP

後來又找到別的方式,有二個可以使用的指令:
chcp (可用 chcp /? 查詢相關用法)
graftabl (可用 graftabl /? 查詢相關用法)
(也不知道為什麼會有人知道這種指令,真是太強了…)

試用了一下,那個先執行 graftabl 950 後,再執行 DOS 的程式,
結果亂碼,再執行一次 graftabl 950 ,也再執行一次那個 DOS 的程式。
竟然ok了,看到中文了(不用進ET3),不過,似乎輸入法就叫不出來了,
而且程式好像很容易出問題(畢竟是dos的程式),但至少真的看到中文了 ^^