星期二, 11月 09, 2010

使用tar指令及磁帶機做差異備份或增量備份

磁帶機裝置名稱依系統和使用的磁帶不同有可能是: /dev/st0、/dev/rst0、/dev/rft0/、/dev/sa0等不同名稱。
如果有一個以上的磁帶裝置會依序命名為st1、st2等。
開頭加上n ( nst、nsa ) 的裝置代表操作完不捲回,差異或增量備份使用這種模式可以省去換磁帶的麻煩又可以充份利用磁帶容量。

常用磁帶操作指令
mt -f /dev/st0 status 目前磁帶狀態
mt -f /dev/st0 rewind 磁帶捲回開頭
mt -f /dev/st0 offline 磁帶捲回開頭並退出磁帶
mt -f /dev/st0 erase 清空磁帶
mt -f /dev/nst0 fsf 1 往前一個檔案 (數字1可以改為其它數值)
mt -f /dev/nst0 bsf 1 往後一個檔案
mt -f /dev/nst0 asf n 捲回開頭再往前n個檔案(n為數值)
mt -f /dev/nst0 eom 磁帶資料末尾

備份作業
1月1日
全備份 tar -cf /dev/nst0 /datas

2月1日
差異或增量備份 tar -cf /dev/nst0 -N "20xx-01-01" /datas

3月1日
增量備份 tar -cf /dev/nst0 -N "20xx-02-01" /datas
差異備份 tar -cf /dev/nst0 -N "20xx-01-01" /datas

4月1日
增量備份 tar -cf /dev/nst0 -N "20xx-03-01" /datas
差異備份 tar -cf /dev/nst0 -N "20xx-01-01" /datas

注意tar的 -N 選項會包含當天(每個月的1日),所以每個月1日的檔案會重復備份避免遺漏

增量備份還原
mt -f /dev/st0 rewind
tar -xvf /dev/nst0
tar -xvf /dev/nst0
tar -xvf /dev/nst0
tar -xvf /dev/nst0
持續還原全部備份

差異備份還原(只要還原第一個和最後一個備份檔)
mt -f /dev/st0 rewind
tar -xvf /dev/nst0
mt -f /dev/nst0 eom
mt -f /dev/nst0 bof 1
tar -xvf /dev/nst0

使用限制
目錄更名,依檔案更新日期的增量備份還原後會將新舊檔案放在不同目錄。
檔案更名,不會備份到新檔案名稱。
如果有目錄或檔案更名可以使用touch指令更新檔案時間。
也可以考慮使用 -g ( --listed-incremental ) 參數
備份
tar -cvf /dev/nst0 -g tar-data.snar /data
tar -cvf /dev/nst0 -g tar-data.snar /data
tar -cvf /dev/nst0 -g tar-data.snar /data
還原
mt -f /dev/st0 rewind
tar -xvf /dev/nst0 -g /dev/null
tar -xvf /dev/nst0 -g /dev/null
tar -xvf /dev/nst0 -g /dev/null
還原時 -g 參數不需參考snar檔,可以隨便給一個值。
還原時有-g參數,tar指令會刪除備份時不存在系統中的檔案。

星期三, 10月 27, 2010

Samba虛擬主機設定

這裡要談的不是將Samba架在虛擬主機中,而是一台Samba Server 同時服務多個NetBios Name,而且每個NetBios Name可以設定不同的分享和參數。
這種模式類似網站主機的虛擬主機——一個網站主機可以對應多個網站。
案例說明:
主機名稱:server1
主機別名:serverA、serverB
使用網路芳鄰連到serverA、serverB時分別可以看到shareA、shareB
smb.conf
----------------------------------------------------------------------------------------------------------
[global]
workgroup = group1
netbios name = server1
smb ports = 139 <-------使用139 port %L 才有作用,如果不用%L include不同設定, 也可以用 %i (IP address),那就要加
bind interfaces only = True 和設定interface
netbios aliases = serverA, serverB
include = /etc/samba/smb-%L.conf
---------------------------------------------------------------------------------------------------------

smb-serverA.conf
--------------------------------------------------------------------------------------------------------
[global] <-----------------如果有加所有在smb.conf的設定都失效,如果不加只要設定想變更的參數
workgroup = groupA
netbios name = serverA
[shareA]
path = /export/pathA
------------------------------------------------------------------------------------------------------

smb-serverB.conf
--------------------------------------------------------------------------------------------------------
<------不加gloabl會套用smb.conf的設定
smb ports = 445 139
workgroup = groupB
netbios name = serverB
[shareB]
path = /export/pathB
------------------------------------------------------------------------------------------------------

smb-server1.conf <-----------------也可以不設
-----------------------------------------------------------------------------------------------------
-----------------------------------------------------------------------------------------------------

星期四, 8月 26, 2010

Windows作業系統不斷重開機,無法看到藍底白字的訊息

有些Windows系統設定為,出問題時自動重開機,這樣系統有問題時就看不到經典的藍底白字畫面,只是不斷重開機無法看到錯誤訊息增加修復的困難。
要修改的registry位於 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\CrashControl
AutoReboot 的 DWORD值設為0,就不會在系統CRASH時自動重開機。

我常用的離線修改registry方式有兩種

一使用Winpe XPE等Windows環境開機光碟
開機後與一般WINDOWS一樣執行regedit,程式啟動後在
HKEY_LOCAL_MACHINE 上按滑鼠右鍵選 載入HIVE 控制檔,選擇 Windows\System32\Config\system,掛載名稱自行設定。
掛載好以後就可以從掛載名稱向下找到相關鍵值做修改。( ControlSet001 002 003 等最好一起修改 )

二使用GNU/Linux救援光碟

執行#ntpasswd -w
Select: [1] ------->選擇WINDOWS所在PARTION
[WINDOWS/system32/config] :
------->選擇WINDOWS所在目錄
[1] : --------------------> Password reset [sam system security]
What to do? [1] -> 9 ------------------->選9 Registry editor
>hive 1 ------------------>切換到 SYSTEM 這個HIVE
>cd ControlSet001\Control\CrashControl -------->切換到相關目錄,因為區分大小寫,可搭配 ls 一層一層切換
>ed AutoReboot ------------------> 修改 AutoReboot
->0x0 -----------------> DWORD值為 0x0
>q ---------------->離開
What to do ? [1] -> q
---------------->離開
About to write file(s) back! Do it? [n/y] : y -------------->儲存修改後的資料
Run it again? [n/y] : n ---------------------------->不重新執行
如果有 ControlSet002 等請一併修改

常見用GNU/Linux救援光碟有 ripSystemRescueCD

星期五, 8月 20, 2010

Ubuntu Enterprise Cloude 重新下載 STORE 中的影像檔

#sqlite3 /var/lib/image-store-proxy/database
sqlite>select * from image_registration;
sqlite>delete from image_registration where uri="..............";
sqlite>.quit

星期五, 8月 06, 2010

我的UBUNTU意外毀損救援紀實

以前就知道經常使用的tar指令在操作的時候會自動將目錄開頭的斜線( / )拿掉,雖然知道這個功能的用意是避免解壓縮時蓋掉重要的系統檔,但是從來不覺得這個功能很重要。

直到上週用cpio解一個initrd.img,解開後發現ls指令不能用,重開機開不起來大略看了一下開機錯誤訊息,意識到這已經不是我原來的系統了。

這時候我已經知道是解那個initrd.img時蓋掉了原來的系統,可是我非常確定我是建了一個子目錄在目錄中解壓縮的,這時想起tar的貼心其實也多少造成了管理者的大意,總而言之就是cpio沒有這個貼心的功能。
後悔已經來不及了,只好拿出救援光碟開機。

第一步:
cat initrd.img|cpio -t 先看看這個檔大致有那些內容
評估受影響的有 /lib /usr/lib /bin /sbin /etc
可能不受影響的有 /dev /proc /tmp /sys

第二步:
從備份的/etc目錄複蓋回來

第三步:
從其它電腦複製 /lib /usr/lib /bin /sbin

第四步:
重開機,還是有一些類似的錯誤訊息無法啟動,可能/etc內還是有屬於外來的啟動程式

第五步:
完整刪除/etc,重新還原/etc,重新開機可進入單人模式,部份指令不能執行

第六步:
find /lib|xargs dpkg -S|grep "not found" 找出不屬於任何套件的檔案後,人工判斷後手動刪除
find /usr/lib|xargs dpkg -S|grep "not found" 同樣對/usr/lib/做一次

第七步:
重開機,單人模式正常,無法登入圖形界面,錯誤訊息
/usr/lib/libgconf2-4/gconf-sanity-check-2 和這個檔案有關
網路搜尋和家目錄的權限有關,檢查後沒發現問題

第八步:
處理到這段遇到瓶頸,做了很多事都完全沒有效果,其中包含
dpkg-reconfigure --all 重設所有套件
for pkg in packagelist; do aptitude reinstall $pkg; done; 重新安裝所有已安裝的套件
packagelist是我已安裝的套件列表,我用的simple backaup軟體會自動產生
這個動作花了八小時才完成,可是同樣一點用也沒有

第九步:
重新檢查一次initrd.img,終於有驚人的發現 "它的/tmp目錄權限是774",
比較自已系統的/tmp目錄,果然也被改掉了,原來以為不會被響影的目錄,其實也是最容易修復的目錄,
因為思慮不週竟然花了最多的時間。

第十步:
將/tmp目錄重設為777,重開機,系統完全回復正常。

檢討:
一、目前的備份是否足夠(/etc /home /var中有用到的目錄)﹖應該夠,至少能將系統還原至可用狀態,全備份實在太花時間和空間。
二、操作cpio和其它解縮軟體時一定要小心,一定要用t選項先列出壓縮檔中的目錄。
三、tmp目錄造成X Windows不能登入,以前好像遇過也是花了很多時間才找到,竟然又發生一次。
四、目前用的系統從6.04一直升上來的到現在已經超過4年了,這次發生的意外是目前遇到影響範圍最大的一次意外,雖然沒有重灌但是有的目錄機乎已經是重建一樣,雖然用起來和原來的系統一樣,可是心裡有一點疑惑 "究竟這還是不是原來的系統"

星期四, 8月 05, 2010

變更UBUNTU自動更新設定

安裝UBUNTU時有三種自動更新的選項
  • 不自動更新 (No automatic updates)
  • 自動安裝安全更新 (Install security updates automatically)
  • 使用 Landscape 管理系統 (Manage system with Landscape)
裝好之後如果沒有安裝圖形界面又想修改自動更新的選項,可以修改 /etc/apt/apt.conf.d/10periodic 這個檔案

自動更新的預設值
APT::Periodic::Enable "1";
APT::Periodic::Update-Package-Lists "1";
APT::Periodic::Download-Upgradeable-Packages "1";
APT::Periodic::AutocleanInterval "5";
APT::Periodic::Unattended-Upgrade "1";
不自動更新的預設值
APT::Periodic::Update-Package-Lists "1";
APT::Periodic::Download-Upgradeable-Packages "1";
APT::Periodic::AutocleanInterval "1";

/etc/apt/apt.conf.d/ 這個目錄下還有其它檔案可供設定,例如:不要自動更新的套件

星期一, 6月 07, 2010

一行指令將目錄中的檔名改為大寫

find .|sed -e p -e 'y/a-z/A-Z/'|xargs -n2 mv

星期五, 5月 14, 2010

升級Dataface到1.2.4

今天升級Dataface到1.2.4版,出乎意料的順利
解壓縮後將寫入權限設給 Dataface/templates_c/ 目錄
就一切正常,繁體中文的語系也不用自己新增,
看來使用Dataface的人也慢慢多了。

http://xataface.com/admin.php?-action=home

星期二, 3月 09, 2010

在Ubuntu karmic(9.10) 下安裝OCS Inventory NG 中文支援

OCS Inventory NG是一套開放原始碼的電腦資產管理軟體,試用後覺得有以下特色
  1. 免費.
  2. 跨平台支援MS Windows系列及Unix Like系統等作業系統.
  3. 使用代理程式搜集電腦資訊(不需AD網域).
  4. 內建軟體派送功能(需將代理程式安裝為服務模式).
  5. 可自訂標籤(財產號、使用者姓名等).
  6. 可自訂要搜集的Windows登錄檔資訊.
  7. 清單顯示可自訂欄位.
  8. 可將查尋到的資料設定為動態或靜態群組.
在Ubuntu karmic(9.10) 下安裝OCS Inventory NG 中文支援步驟
  1. sudo -s -H (進入root)
  2. aptitude install ocsinventory-reports ocsinventory-server (先安裝內建版本,遇到建立資料庫時先跳過)
  3. 到 ftp://linvinus.ru/ocs/ 下載支援utf-8的deb套件並安裝. (client 程式必須同時改用utf-8版本,否則無法更新資訊,apache errlog 會有 Couldn't open encmap utf8.enc 錯誤)
  4. 使用瀏覽器瀏覽 http://ocs.server.name/ocsreports/ 進行系統設定.
  5. Configuration/Config/Deployment/Downloay (預設為關閉,如要派送軟體需打開)
  6. 確認Configuration/Config/Interface 的 DOWNLOAD_PACK_DIR 和 IPDISCOVER_IPD_DIR 的路徑,可能分別多key了 download 和 ipd
  7. aptitude install ssl-cert (安裝憑證建立工具)
  8. make-ssl-cert generate-default-snakeoil --force-overwrite ( 建立憑證,為了安全性因素,系統限制軟體派送伺服器一定要使用ssl)
  9. cd /etc/apache2/mod-enabled
  10. ln -s ../mod-avaiable/perl.load .
  11. ln -s ../mod-avaiable/ssl.conf .
  12. ln -s ../mod-avaiable/ssl.load .
  13. cd /etc/apache2/sites-enabled
  14. ln -s ../sites-available/default-ssl .
  15. /etc/init.d/apache2 restart (重新啟動apache載入perl及ssl模組)
  16. 到 ftp://linvinus.ru/ocs/ 下載並安裝支援 utf-8 的 windows-agent (1.3版測試時,輸入伺服器網址時,一定要使用名稱不可用ip,否則無法更新資料)
  17. 複製伺服器上 /etc/ssl/certs/ssl-cert-snakeoil.pem 到 pc 的 agent 安裝目錄,並將檔案名稱改為 cacert.pem
  18. 在 pc 的 agent 安裝目錄執行 OCSInventory.exe /server:ocs.server.name /debug 進行測試

星期三, 3月 03, 2010

VirtualBox 虛擬網卡改用 virtio-net

我使用virtualboxr常遇到在虛擬電腦中要連實體電腦的網路分享時,要連第2次才會成功。

VirtualBox從3.1.0版(2009-11-30發佈)開始支援virtio-net,我直到最近重建虛擬電腦才發現有這個設定,試用過後不再有網路分享要連第2次才成功的問題。

比較麻煩的是virtio-net由kvm開發,virtiualbox雖然支援卻不提供驅動程式,使用virtio-net時要另外從
http://sourceforge.net/projects/kvm/files/kvm-driver-disc/ 下載驅動程式。

星期二, 1月 26, 2010

讓系統進入待命狀態的快速鍵

我不喜歡設定電腦幾分鐘不使用後,進入待命狀態達到節能的目的,因為常常不用電腦幾分鐘後電腦好不容易進入待命了,又要開始用電腦了。

為了節約能源並且兼顧使用方便性,我研究了一個方法透過鍵盤捷徑(快速鍵)讓我的 Ubuntu 9.10 的電腦可以很快的進入待命狀態(其它比較新的系統應該也適用請自行測試)。

1.首先找到進入待命狀態的指令是 /usr/sbin/pm-suspend,這是 /usr/lib/pm-utils/bin/pm-action 的符號連結。
2.因為 pm-suspend 只允許 root user 執行,所以執行 sudo visudo 在編輯器開啟的檔案中加入一行
your_user_name ALL=NOPASSWD: /usr/sbin/pm-suspend
3.滑鼠點選->選單->系統->偏好設定->鍵盤捷徑->加入,名稱:系統待命,指令:sudo pm-suspend,套用後設定一個喜歡的按鍵組合。

星期三, 1月 20, 2010

解決wvText轉出中文變成星號(*)問題

wvText是wvWare套件中的一個script程式,用來將MS Word檔案轉成普通文字檔。
執行wvText時會先呼叫wvhtml將MS Word檔案轉成html格式,再依優先順序呼叫
elinks、links、lynx、wv或Ware -x wvText.xml
去除html檔中的html標籤

如果電腦中沒有裝elinks,wvText就會改用links,而links如果不加-codepage參數,中文就會轉成星號(*)
而elinks不會有這個問題,而且依wvText的說明elinks轉出的格式也最完整。

所以如果wvText轉出的中文字如果都是星號(*)的話,裝上elinks應該可以解決。

星期三, 1月 13, 2010

Xataface 利用 Cookies 減少重覆填寫基本資料

修改或新增 應用程式目錄/tables/table_name/table_name.php
class tables_survey_y100 {

function beforeSave(&$record){ //存檔前先寫入cookie
$cookie_arr = array('depart'=>'填表單位', 'section'=>'填表科別', 'user_name'=>'填表人', 'tel'=>'聯絡分機');
foreach ($cookie_arr as $id => $value) {
setcookie($id,$record->strval($value),time()+60*60*24*30);
}
}

function block__after_new_record_form(){ //新增資料時讀入cookie值
echo "<script language='javascript'><!--"
$cookie_arr = array('depart'=>'填表單位', 'section'=>'填表科別', 'user_name'=>'填表人', 'tel'=>'聯絡分機');
foreach ($cookie_arr as $id => $value) {
echo "document.new_survey_y100_record_form.$value.value='".$_COOKIE[$id]."';";
}
echo "//--></script>"


ps:大於、小於符號請換成半型

xatafave自訂欄位寬度

xataface目前(1.2.2版)為止不能用調整參數的方式自訂清單檢視的欄位寬度,比較方便的替代方案是增加widget:label的字元來增加欄位寬度,但是中文因為每個字元都可以斷行的關係,並不能利用增加欄名的中文字元來增加欄位寬度。

改善這個問題可以設定 white-space: nowrap; 這個css參數強迫不要斷行。
通常我會希望全網站都套用這個設定,所以直接修改 xataface/plone.css
增加

thead {
white-space: nowrap;
}