如何執行批次檔並隱藏(背景執行)

1.隱藏執行

說是隱藏,其實是沒有顯示前景視窗而已,應稱為背景執行,在工作管理員裡可以看到process。使用Windows Script達此目的:

建立一檔案run.vbs

編輯它

Set ws = CreateObject(“Wscript.Shell”)
ws.run “cmd /c c:\run.bat”,vbhide

ws.run “c:\run.bat” ,0

2.縮小執行

若有輸出結果,則可用縮小至工作列的方式,這與上面的方式都要寫另外一支的批次檔來呼叫執行。

cmd /c start /min c:\run.bat

Rsync設定詳說

Rsync on debian

 

rsync 官方網站

Rsync 在網路上有不少教學文件,但它在不同的作業系統上或者是不同的 linux 版本上的設定,多少都有一些差異,所以你若在不同的系統環境下你要完全照著教學作,經常會設定不起來,因此就要理解其原理,比照相對的位置去設定才行。尤其是 debian 的設定方法經常都跟 redhat、fedora系列的不一樣,而台灣用 debian 的人又少,因此設定上若沒找到教學文件的話,自己設起來是挺困難的。

底下介紹的是 Rsync 安裝在 debian 5.0 lenny 的教學,透過遠端網路和加密碼認証備份,從而實現異地備援的效果。 ubuntu 系統也適用此設定 (應該是吧,我猜的)

 

(1).安裝 rsync (兩端都需設定)

apt-get install rsync

(2).設定 rsync 常駐 (僅server端需設定)

vim /etc/default/rsync

將 RSYNC_ENABLE=false
改 RSYNC_ENABLE=true

要改其它 port 的話,同樣在此檔,找到 RSYNC_OPTS=’ ‘ 改寫如下

RSYNC_OPTS=’–port=8730′

 

(3).設定 rsync server 設定檔 (僅server端需設定)
cp /usr/share/doc/rsync/examples/rsyncd.conf /etc/rsyncd.conf

vim /etc/rsyncd.conf

————————- /etc/rsyncd.conf 設定範例1 ————————————

# MODULE OPTIONS

[system]
#↑此為模組名稱,最好不要打中文,容易出錯,模組名稱是用來備份時的代號

comment = 整個系統備份
#↑ 這行只是文字說明而已
path = /
#↑設定此模組 system 的路徑
use chroot = no
#↑變更啟始路徑
max connections=2
#↑最大連線數
lock file = /var/lock/rsyncd
read only = yes
#↑唯讀
list = yes
uid = root
gid = root
# 設定執行rsync時的身份為何
# exclude =
#↑設定排除檔案和目錄
# exclude from =
#↑設定排除檔案和目錄的清單從某個檔案讀進來
# include =
# include from =
auth users = user1
#↑設定可連進來的使用者帳號,此 user1 的帳密必須寫在底下 rsyncd.secrets 這個檔(若沒有auth users此項則 anonymous可登入)
secrets file = /etc/rsyncd.secrets
#↑帳密檔設定,此檔必須設為 chmod 600, root 專有的屬性,否則會報錯
strict modes = yes
# hosts allow =
# hosts deny =
ignore errors = no
ignore nonreadable = yes
transfer logging = no
timeout = 600
refuse options = checksum dry-run
dont compress = *.gz *.tgz *.zip *.z *.rpm *.deb *.iso *.bz2 *.tbz
#不要對有以上列出附檔名之檔案做壓縮。

————————- /etc/rsyncd.conf 設定範例1 ————————————

————————- /etc/rsyncd.conf 設定範例2 ————————————

# GLOBAL OPTIONS 全域設定

pid file=/var/run/rsyncd.pid
use chroot = no
max connections=2
lock file = /var/lock/rsyncd
read only = yes
list = yes
uid = root
gid = root
auth users = user1
secrets file = /etc/rsyncd.secrets
strict modes = yes
ignore errors = no
ignore nonreadable = yes
transfer logging = no
timeout = 600
refuse options = checksum dry-run
dont compress = *.gz *.tgz *.zip *.z *.rpm *.deb *.iso *.bz2 *.tbz

 

# MODULE OPTIONS 模組設定

[MCxxxx]
comment = mysql備份
path = /var/lib/mysql/MCxxxx
[MGxxxx]
path = /var/lib/mysql/MGxxxx

[html]
comment = 公用程式
path = /var/www/html
[inc]
comment = 公用程式
path = /var/www/includes

[suitetpe]
comment = 客戶1
path = /var/www/customers/webs/suitetpe
[tecofound]
comment = 客戶2
path = /var/www/customers/webs/tecofound

————————- /etc/rsyncd.conf 設定範例2 ————————————

每次改完以上設定檔,需重啟 rsync 才能載入新的設定值,重啟指令

/etc/init.d/rsync restart

 

(4).設定密碼檔 (兩端都需設定)

echo “user1:password” > /etc/rsyncd.secrets
echo “password” > /etc/rsyncd.pw
chmod 600 /etc/rsyncd.secrets
chmod 600 /etc/rsyncd.pw
chown root:root /etc/rsyncd.secrets
chown root:root /etc/rsyncd.pw

說明:rsyncd.secrets 此檔內容的格式為 帳號:密碼

rsyncd.pw 此檔內容只存密碼

 

(5).設定備份指令 (僅 client 端需設定)

將以下內容寫成一個 script 檔,放入 crontab 去定時執行

———————-備份指令設定範例1——————————————————————————-

rsync -aHDStv –password-file=/etc/rsyncd.pw –delete –exclude=/proc/* –exclude=/sys/* –exclude=/tmp/* –exclude=/mnt/* –exclude=/etc/proftpd/proftpd.conf –exclude=/etc/udev/rules.d/70-persistent-net.rules –exclude=/etc/network/interfaces –exclude=/etc/hosts –exclude=/etc/hostname –exclude=/root/iptables.sh –exclude=/selinux/* –exclude=/dev/* –exclude=/etc/cron.d/remotebakuser1@192.168.0.33::system /

———————-備份指令設定範例1——————————————————————————-

———————-備份指令設定範例2——————————————————————————-

#mysql 的2個資料庫備份
rsync -aHDStv –password-file=/etc/rsyncd.pw –delete user1@10.88.188.210::MCxxxx/var/lib/mysql/MCxxxx
rsync -aHDStv –password-file=/etc/rsyncd.pw –delete user1@10.88.188.210::MGxxxx/var/lib/mysql/MGxxxx

#公用程式同步
rsync -aHDStv –password-file=/etc/rsyncd.pw –delete user1@10.88.188.210::html/var/www/html
rsync -aHDStv –password-file=/etc/rsyncd.pw –delete user1@10.88.188.210::inc/var/www/includes

#客戶網站目錄同步
rsync -aHDStv –password-file=/etc/rsyncd.pw –delete user1@10.88.188.210::tecofound/var/www/customers/webs/tecofound
rsync -aHDStv –password-file=/etc/rsyncd.pw –delete user1@10.88.188.210::suitetpe/var/www/customers/webs/suitetpe

———————-備份指令設定範例2——————————————————————————-

簡要說明:
rsync 參數 –指定密碼檔 –delete(刪除) –exclude=排除檔案或目錄 來源(語法為:帳號@IP或域名::模組名稱) 目地

詳細參數說明:

-a, –archive 權限保存模式
-H, –hard-links 保留硬式連結
-D, –devices 保留device資訊(root only)
-S, –sparse 嘗試去處理稀疏的檔案,讓這些檔案在目的端佔去較少的磁碟空間.
-t, –times 保留時間點
-v , –verbose 複雜的輸出訊息,若要在背景執行請拿掉此參數

–password-file=/etc/rsyncd.pw –delete 指定密碼檔
–delete 刪除server端已經不存在,而client端存在的檔案

rsync 例外檔 (不要同步備份的檔案或目錄)

這裡要說明的是,設定範例1的部份,因為我是幾乎整個系統的備份,而我的系統上面又有啟動selinux,所以要排除的檔案有很多,這部份可以你自己的需求去慢慢測試排除的檔案 (設定範例2,就沒有那麼麻煩,只針對幾個目錄的備份,故沒有那麼多要排除的檔案)

–exclude=/etc/proftpd/proftpd.conf
#↑因為裡面有不同的 hostname 對應
–exclude=/etc/udev/rules.d/70-persistent-net.rules
#↑因不同的網卡 mac address 對應
–exclude=/etc/network/interfaces
#↑因不同的IP設定
–exclude=/root/iptables.sh
#↑因在 iptables.sh 內有關閉 eth0 指令
–exclude=/etc/hosts
#↑因不同的 localhost 對應
–exclude=/etc/hostname
#↑因為不同的 hostname 設定
–exclude=/selinux/*
–exclude=/dev/*
#↑因權限問題而無法備份
–exclude=/etc/cron.d/remotebak
#↑因為只要vh2去同步vh1即可,故 vh1 上不需要有此檔

 


rsync設定檔詳解

對於rsync服務器來說,最重要和複雜的就是它的配置了。rsync服務器的配置文件為/etc/rsyncd.conf,其控制認證、訪問、日誌記錄等等。

該文件是由一個或多個模組結構組成。一個模組定義以方括弧中的模組名開始,直到下一個模組定義開始或者文件結束,模組中包含格式為name = value的參數定義。每個模組其實就對應需要備份的一個目錄樹,比方說在我們的實例環境中,有三個目錄樹需要備份:/www/、 /home/web_user1/和/home/web_user2/,那麼就需要在配置文件中定義三個模組,分別對應三個目錄樹。

配置文件是行為單位的,也就是每個新行都表示一個新的註釋、模組定義或者參數賦值。以#開始的行表示註釋,以””結束的行表示下面一行是該行的繼續。參數賦值中等號後可能是一個大小寫不敏感的字符串、一個以trure/false表示的布爾值。

全局參數

在文件中[modlue]之前的所有參數都是全局參數,當然也可以在全局參數部分定義模組參數,這時候該參數的值就是所有模組的預設值。

motd file

“motd file”參數用來指定一個消息文件,當客戶連接服務器時該文件的內容顯示給客戶,預設是沒有motd文件的。

log file

“log file”指定rsync的日誌文件,而不將日誌發送給syslog。

pid file

指定rsync的pid文件。

syslog facility

指定rsync發送日誌消息給syslog時的消息級別,常見的消息級別是:uth, authpriv, cron, daemon, ftp, kern, lpr, mail, news, security, sys-log, user, uucp, local0, local1, local2, local3,local4, local5, local6和local7。預設值是daemon。

模組參數

在全局參數之後就需要定義一個或多個模組了,模組中可以定義以下參數:

comment

給模組指定一個描述,該描述連同模組名在客戶連接得到模組列表時顯示給客戶。預設沒有描述定義。

path

指定該模組的供備份的目錄樹路徑,該參數是必須指定的。

use chroot

如果”use chroot”指定為true,那麼rsync在傳輸文件以前首先chroot到path參數所指定的目錄下。這樣做的原因是實現額外的安全防護,但是缺點是需要以roots權限,並且不能備份指向外部的符號連接所指向的目錄文件。預設情況下chroot值為true。

max connections

指定該模組的最大並發連接數量以保護服務器,超過限制的連接請求將被告知隨後再試。預設值是0,也就是沒有限制。

lock file

指定支持max connections參數的鎖文件,預設值是/var/run/rsyncd.lock。

read only

該選項設定是否允許客戶上載文件。如果為true那麼任何上載請求都會失敗,如果為false並且服務器目錄讀寫權限允許那麼上載是允許的。預設值為true。

list

該選項設定當客戶請求可以使用的模組列表時,該模組是否應該被列出。如果設置該選項為false,可以創建隱藏的模組。預設值是true。

uid

該選項指定當該模組傳輸文件時守護進程應該具有的uid,配合gid選項使用可以確定哪些可以訪問怎麼樣的文件權限,預設值是”nobody”。

gid

該選項指定當該模組傳輸文件時守護進程應該具有的gid。預設值為”nobody”。

exlude

用來指定多個由空格隔開的多個模式列表,並將其添加到exclude列表中。這等同於在客戶端命令中使用–exclude來指定模式,不過配置文件中指定的exlude模式不會傳遞給客戶端,而僅僅應用於服務器。一個模組只能指定一個exlude選項,但是可以在模式前面使用”-“和”+”來指定是exclude還是include。

但是需要註意的一點是該選項有一定的安全性問題,客戶很有可能繞過exlude列表,如果希望確保特定的文件不能被訪問,那就最好結合uid/gid選項一起使用。

exlude from

指定一個包含exclude模式的定義的文件名,服務器從該文件中讀取exlude列表定義。

include

用來指定多個由空格隔開的多個rsync並應該exlude的模式列表。這等同於在客戶端命令中使用–include來指定模式,結合 include和exlude可以定義複雜的exlude/include規則。一個模組只能指定一個include選項,但是可以在模式前面使用”-“和”+”來指定是exclude還是include。

include from

指定一個包含include模式的定義的文件名,服務器從該文件中讀取include列表定義。

auth users

該選項指定由空格或逗號分隔的用戶名列表,只有這些用戶才允許連接該模組。這裡的用戶和系統用戶沒有任何關係。如果”auth users”被設置,那麼客戶端發出對該模組的連接請求以後會被rsync請求challenged進行驗證身份這裡使用的 challenge/response認證協議。用戶的名和密碼以明文方式存放在”secrets file”選項指定的文件中。預設情況下無需密碼就可以連接模組(也就是匿名方式)。

secrets file

該選項指定一個包含定義用戶名:密碼對的文件。只有在”auth users”被定義時,該文件才有作用。文件每行包含一個username:passwd對。一般來說密碼最好不要超過8個字符。沒有預設的 secures file名,需要限式指定一個。(例如:/etc/rsyncd.secrets)

strict modes

該選項指定是否監測密碼文件的權限,如果該選項值為true那麼密碼文件只能被rsync服務器運行身份的用戶訪問,其他任何用戶不可以訪問該文件。預設值為true。

hosts allow

該選項指定哪些IP的客戶允許連接該模組。客戶模式定義可以是以下形式:

o xxx.xxx.xxx.xxx,客戶主機只有完全匹配該IP才允許訪問。例如:192.167.0.1

o a.b.c.d/n,屬於該網絡的客戶都允許連接該模組。例如:192.168.0.0/24

o a.b.c.d/e.f.g.h,屬於該網絡的客戶都允許連接該模組。例如:192.168.0.0/255.255.255.0

o 一個主機名,客戶主機只有擁有該主機名才允許訪問,例如:backup.linuxaid.com.cn。

o *.linuxaid.com.cn,所有屬於該域的主機都允許。

預設是允許所有主機連接。

hosts deny

指定不允許連接rsync服務器的機器,可以使用hosts allow的定義方式來進行定義。預設是沒有hosts deny定義。

ignore errors

指定rsyncd在判斷是否運行傳輸時的刪除操作時忽略server上的IP錯誤,一般來說rsync在出現IO錯誤時將將跳過–delete操作,以防止因為暫時的資源不足或其它IO錯誤導致的嚴重問題。

ignore nonreadable

指定rysnc服務器完全忽略那些用戶沒有訪問權限的文件。這對於在需要備份的目錄中有些文件是不應該被備份者得到的情況是有意義的。

transfer logging

使rsync服務器使用ftp格式的文件來記錄下載和上載操作在自己單獨的日誌中。

log format

通過該選項用戶在使用transfer logging可以自己定制日誌文件的字段。其格式是一個包含格式定義符的字符串,可以使用的格式定義符如下所示:

o %h 遠程主機名

o %a 遠程IP地址

o %l 文件長度字符數

o %p 該次rsync會話的進程id

o %o 操作類型:”send”或”recv”

o %f 文件名

o %P 模組路徑

o %m 模組名

o %t 當前時間

o %u 認證的用戶名(匿名時是null)

o %b 實際傳輸的字節數

o %c 當發送文件時,該字段記錄該文件的校驗碼

預設log格式為:”%o %h [%a] %m (%u) %f %l”,一般來說,在每行的頭上會添加”%t [%p] “。在源代碼中同時發佈有一個叫rsyncstats的perl腳本程序來統計這種格式的日誌文件。

timeout

通過該選項可以覆蓋客戶指定的IP超時時間。通過該選項可以確保rsync服務器不會永遠等待一個崩潰的客戶。超時單位為秒鐘,0表示沒有超時定義,這也是預設值。對於匿名rsync服務器來說,一個理想的數字是600。

refuse options

通過該選項可以定義一些不允許客戶對該模組使用的命令參數列表。這裡必須使用命令全名,而不能是簡稱。但發生拒絕某個命令的情況時服務器將報告錯誤信息然後退出。如果要防止使用壓縮,應該是:”dont compress = *”。

dont compress

用來指定那些不進行壓縮處理再傳輸的文件,預設值是

*.gz *.tgz *.zip *.z *.rpm *.deb *.iso *.bz2 *.tbz

主機板規格比較

參考維基百科,擷取我需要的部分

http://zh.wikipedia.org/wiki/%E4%B8%BB%E6%A9%9F%E6%9D%BF%E8%A6%8F%E6%A0%BC%E6%AF%94%E8%BC%83

 

規格 尺寸 (mm)
WTX 356×425
AT 350×305
Baby-AT 330×216
BTX 325×266
ATX 305×244
EATX 305×330
LPX 330×229
NLX 254×228
microATX 244×244
DTX 244×203
FlexATX 229×191
Mini-DTX 203×170
EBX 203×146
microATX 171×171
Mini-ITX 170×170
EPIC 165×115
ESM 149×71
Nano-ITX 120×120
COM Express 125×95
ESMexpress 125×95
ETX / XTX 114×95
Pico-ITX 100×72
PC/104 96×90
mobile-ITX 75×45
Ultra ATX ?×244

資料庫的ACID

記得好像某個考試有考ACID,參考維基百科

http://zh.wikipedia.org/wiki/ACID

 

ACID,是指資料庫管理系統DBMS)在寫入/異動資料的過程中,為保證交易(transaction)是正確可靠的,所必須具備的四個特性:原子性(atomicity,或稱不可分割性)、一致性(consistency)、隔離性(isolation,又稱獨立性)、持久性(durability)。

主要有四大特性

  • 原子性:一個事務(transaction)中的所有操作,要麼全部完成,要麼全部不完成,不會結束在中間某個環節。事務在執行過程中發生錯誤,會被回滾(Rollback)到事務開始前的狀態,就像這個事務從來沒有執行過一樣。
  • 一致性:在事務開始之前和事務結束以後,資料庫的完整性沒有被破壞。這表示寫入的資料必須完全符合所有的預設規則,這包含資料的精確度、串聯性以及後續資料庫可以自發性地完成預定的工作。
  • 隔離性:當兩個或者多個事務並發訪問(此處訪問指查詢和修改的操作)資料庫的同一數據時所表現出的相互關係。事務隔離分為不同級別,包括讀未提交(Read uncommitted)、讀提交(read committed)、可重複讀(repeatable read)和串列化(Serializable)。
  • 持久性:在事務完成以後,該事務對資料庫所作的更改便持久地保存在資料庫之中,並且是完全的。

CDATA 區段 – XML 標準

XML 對於許多人都不陌生,但還是有些地方大家不知道該如何使用,例如現在所要介紹的 CDATA 區段。

在某些時候內容中含有 HTML 標籤或者是一些特殊字元﹙如﹕<、>、&﹚,當這些字元出現在內容裡,通常都會出現 XML 分析錯誤的情況,這時候就必須將這些字元作些轉換的工作(如︰< / &lt;、> / &gt;、& / &amp;)。

其實並不需要如此,CDATA 區段提供了一種通知剖析器的方法,說明 CDATA 區段所包含的字元沒有標記。

當 XML 剖析器遇到開頭的『<![CDATA[』,會將接下來的內容報告成字元,而不會嘗試將其解譯成項目或實體標籤。字元參考不能在 CDATA 區段內運作。當它遇到結尾的『]]>』時,剖析器會停止報告並回到正常的剖析,這也能使用在 HTML 文件中。使用方法為︰

  1. <![CDATA[這裡面內容包含了 <font size=”3″>HTML 標籤</font>,以前一些特殊字元 & 所以要使用 CDATA 區段包起來]]>

以下面商品資料文件 PDI0120080331195202.xml 為範例,其中 PDI01DOC.DocContent.Item.ProductUrl 為商品頁面的網址,內容包含了 & 字元;PDI01DOC.DocContent.Item.ProductDesc 為商品說明,內容包含了大量 HTML 標籤。所以這兩個內容我們都用使用了 CDATA 區段包起來,如此 XML 剖析器就能正常剖析了。

無法使用samba分享時,檢查相關設定

1.testparm 檢查smb.conf有沒有什麼地方打錯
2.下達指令 smbclient -L localhost  確定有分享出來
3.#ll /{your share} directory U,G,O權限有沒有設好,chmod 777
4.iptables -L -n 檢查default policy 有沒有被阻檔
5.selinux…不熟就先disabled吧
取消selinux的方法
修改 selinux
step1.
vim /etc/sysconfig/selinux
step2.
將 SELINUX=enforcing

改成SELINUX=disabled

step3.

重開機

Linux上處理硬碟壞軌

養動物園或是管理伺服器的人,難免都會碰到一些硬碟故障的問題。這篇文章略為整理一些在 Linux 上處理壞軌硬體的一些軟體知識與技巧。針對讀者為中等程度以上的使用者,文中僅僅提供參考資料,不說明實際操作或指令明細,請自行參考相關文件。作者以最大善意盡力提供參考資訊,但文中如有疏漏或錯誤造成資料遺失,作者不負任何責任。

文中說明均以 Linux Extended file system 為主,操作平臺是 Debian GNU/Linux. 所提及工具授權均為 FLOSS 。假設錯誤硬碟為 /dev/sdb,所有指令需要以 root 執行。

章節結構

  • 錯誤類型。
  • 壞軌測試。
  • 預先偵測。
  • 備份與資料回復。
  • 排除壞軌磁區。
  • 送修與資料清除。

錯誤類型

這裡討論的硬碟資料損毀,不外乎物理性傷害,摔落、靜電、停電、過熱、原件老化等等。這些傷害會造成邏輯性 (logical error) 上或物理 (physical error) 性的錯誤。

所謂的邏輯性錯誤,就是硬碟離線時,暫存資料來不及寫入,導致資料錯誤異常。所幸大部分的檔案系統都會有一個檔案系統狀態 (Filesystem state) 的值,若是最後使用未順利完成卸載 (umount),下次掛載時就會提示要求作 fsck 檢查。如果是日誌式檔案系統如 ext3/ext4,則會試著回復未完成的操作。這種錯誤偶爾會破壞檔案,fsck/e2fsck 可能會將錯誤檔案移到 lost+found 目錄下,造成困擾,但問題不大。

物理性錯誤指的是硬體磁盤受到損壞,該段磁區無法讀取,也就是壞軌。肯定導致資料遺失,最常見的是系統吐出 I/O Error,無法讀取該檔案。實際的症狀是讀取變慢、聽到 Spin-up 時的卡卡聲(Clicking sound),甚至是系統當機等問題。

當壞軌開始產生時,通常代表硬碟壽命將至,得趕快開始更換健康新硬碟。這篇文章主要討論的是壞軌這種物理性錯誤的處理辦法。

壞軌測試

最基本的測試方法是利用 badblocks (8) 來檢測硬碟是否存在壞軌,這個指令不分檔案系統。若是含有重要資料的硬碟,應該先作預設的非破壞性唯讀測試 (non-destructive read-only test),以避免寫入測試時異常,造成磁碟重置離線。

badblocks -vs /dev/sdb

上述只要一發現壞軌,請第一時間拔下備份吧。若是可承受資料損失,可以使用 “-n” 的非破壞性寫入式測試。這基本上會嘗試寫入資料,再三確認硬碟運作正常。

badblocks -nvs /dev/sdb

預先偵測

不過 badblocks 需要在離線時才能執行。很多時候,伺服器是無法忍受長時間的離線檢查的,必須要能夠線上檢測硬碟健康狀況才行。目前市面所有 ATA 硬碟都已經支援S.M.A.R.T. (Self-Monitoring, Analysis, and Reporting Technology),S.M.A.R.T.  基本上提供一個界面讓管理者可以查詢幾個重要的參數

透過讀取這些參數,管理者能夠預先警覺硬碟錯誤。根據 Google 的調查十萬顆硬碟後的研究報告 (Failure Trends in a Large Disk Drive Population),S.M.A.R.T. 的數值的確反應硬碟錯誤率 – 六十天內,出現 S.M.A.R.T. 掃描錯誤的硬碟是其他硬碟的 39 倍高。

在 Linux 上,可以使用 smartmontools 中的 smartctl (8) 來查詢硬碟的 S.M.A.R.T. 狀態。指令如下

smartctl --attributes /dev/sdb

根據 Google 的研究以及 Bad block HOWTO for smartmontools 指出,與硬碟失效關係最高的數值是 Reallocated Sectors Count/Reallocations event count, Current Pending Sector Count, Uncorrectable Sector Count。這幾組數據代表硬碟發現該磁區已經損毀,它會重新從備用磁區分配一位置取代該損壞磁區,或磁區已發現問題尚未替換或無法替換。這通常可以視為磁區損耗 (surface wear) 的狀況。當你發現這些值不為 0 時,就該開始準備備份資料並作壞軌檢查了。

除了使用 smartctl 手動檢測外,也可以設定 smarted,讓系統自動觀測 S.M.A.R.T. 狀態,有錯誤會顯示於桌面訊息或發送郵件。smartd 的設定可以參考 檢測硬碟狀態 – smartmontools 一文。S.M.A.R.T. 也支援 Self-Test,可以讓硬碟作效能與功能檢查,詳情請見 smartctl (8).

備份與資料回復

在發現壞軌之際,應該第一優先備份資料。如果還能夠掛起檔案系統,則趕緊利用rsynctar 等工具備份檔案。或者利用 dd 將整顆硬碟資料或分割區存檔,未來置換到新硬碟上

dd if=/dev/sdb of=sdb.img

若要確保資料正確複製,可使用 dcfldd 來複製,它會邊複製邊作 hash 確保資料複製正確。不過由於壞軌處常常無法讀取,這會造成 dd 執行失敗。此時可以改用dd_rescue, 它可以略過無法讀取的部分,儘可能複製其他健康的資料。

不過天有不測風雲,人有旦夕禍福。萬一資料損壞的區域不是資料區域,而是存放重要的系統資訊,那就需要額外的處置。建議無論任何時候,都不要在壞硬碟上直接操作,永遠先備份,再於備份碟上進行處理。以下略談三種情境的可用工具

排除壞軌區域

通常如果你的硬碟還在保固範圍,一般原廠均會更換健康的硬碟給你。但如果硬碟已經超過保固,壞軌硬碟仍堪用,可以用來存一些低度重要的資料。

對於這些壞軌,可以用 sector slipping 或叫做 defect mapping 的機制來跳過不用。基本上分成兩種形式,一是透過硬碟控制器或是透過檔案系統的 bad block table 來記錄。

傳統的 (1990 年代中期以前的硬碟)是可以進行低階格式化 (Low-Level Formatting) 的,透過原廠的指令來重新定義物理儲存格式、重新定義 CHS、若是硬碟中有壞軌,可以在低階格式化時避開不用。

由於低階格式化常因為操作錯誤而損壞 (bricked) 硬碟,新款硬碟已經不提供使用者透過指令作低階格式化的工具。取而代之的是透過 hard-drive defect management 功能,以 Hard drive defects table – P & G Lists 來記錄 Bad Sector Mapping。所謂 Primary defect list 是代表出廠時已經產生缺陷的磁區列表,而 Grown defect list 則是使用中產生缺陷的磁區列表。

當硬碟發現壞軌時,便會自動將該磁區列入 G-List 中,並從備用的磁區中替換。因此現在已經沒有所謂低階格式化,目前所謂低階格式化大多指的是 Zero-filled,對磁區填入空值,強迫硬碟重新分配損壞磁區,這也是前述 S.M.A.R.T. 所謂 Reallocated Sectors。

所以你可以做的事情是對壞軌區域寫入空值,迫使它重置。你可以直接透過一開始的 badblocks 所產生之數值直接覆寫錯誤區塊,範例請見 Bad block HOWTO for smartmontools

上述 HOWTO 中詳述了,怎麼計算 e2fsck 吐出來數值,人工計算有點麻煩。以下介紹如何處理利用工具自動處理。

不保留資料

如果確認整顆硬碟資料都不需要保留,可以直接下達一下 dd 指令,重寫整顆硬碟。

dd if=/dev/zero of=/dev/sdb

或者在格式化時下達 -c -c 參數,讓 mkfs.ext3 順便檢查壞軌。

mkfs.ext3 -c -c /dev/sdb1

保留資料

如果硬碟已有資料,並想保留此資料,可以用 badblocks 檢查,並生成 badblocks list,再將 badblocks 吐出的列表,餵給 e2fsck -l.。但是必須確認執行 badblocks 時,指派了正確的 block size,可用 dumpe2fs -h 確認 block size.然後指示給 badblocks。

上述操作有點複雜,比較保險的做法是直接讓 e2fsck 用 badblocks 去作壞軌檢查,指令如下

e2fsck -k -c  -c /dev/sdb1

如此 e2fsck 會將壞軌寫入檔案系統列表中,可以用下述指令查詢目前壞軌列表

dumpe2fs -b /dev/sdb1

其他做法

本節前述可用低階格式化重置硬碟磁區分配,但是新款硬碟已少提供工具程式給終端使用者。有些工具透過反組譯硬碟韌體的方式取得 vendor specific ATA commands。另外,像是 Seagate 等品牌,則在硬碟上留有 TTLserial communication 的界面,於是你可以透過終端機連上硬碟韌體,以 Diagnostic Commands 進行一些偵錯以及重新格式化的動作。

送修與資料清除

爲了避免陳冠希裸照事件發生,送修前最好確保資料已經完全刪除。

就如前述所說,若只是進行快速格式化,硬碟資料也可能被回復。事實上,根據Peter Gutmann 的在 90 年代的研究,他可以用磁力顯微鏡取得複寫過三十五次以上的磁區資料。而美國 National Institute of Standards and Technology 的研究 “Guidelines for Media Sanitization” 或 Craig Wright, Dave Kleiman, Shyaam Sundhar R.S. 的論文Overwriting Hard Drive Data: The Great Wiping Controversy 指出,新型硬碟只需要複寫一次即可。

爲了達到資料保密措施,各國軍方也因此設定有不同的資料清除 。總之,無論你的資料是否重要,在 Linux 上,建議使用這兩種 wipescrub 指令之一來抹除資料,這兩種工具支援上述的各國標準。你也可下載使用 DBAN 製作開機片來清除硬碟資料。

References

[轉]計算機的根號解

來源:http://4rdp.blogspot.tw/2008/04/blog-post_9406.html

可能有人會好奇,計算機如何求得開根號數值,這裡提供個人所知的兩種方法。

方法一:長除式演算法,可直接筆算求平方根值。

運用 (a + b)2– (2a + b) b = a2,初值 a = 0,反覆求 a 的後一位數值 b 。

例 Square(152.276)

  1  2. 3  4
 ------------   列式時以小數點為基準,兩位兩位一組。
/ 1 52.27 60    (2a + b) b
  1           = (2 x 0 + 1) x 1 , a = 0
 ------------
    52
    44        = (2 x 10 + 2) x 2 , a = 10
 ------------
     8 27
     7 29     = (2 x 120 + 3) x 3 , a = 120
 ------------
       98 60
       98 56  = (2 x 1230 + 4) x 4 , a = 1230
 ------------
           6


方法二:以牛頓迭代法計算求解

X = A1/N,將 A 開 N 次方根,

Xn+1 = [(N-1)X+ A/XnN-1]/N ,(N>0)

N = 2 時 ,A>1,1<Xn<A
Xn+1 = [Xn + A/Xn]/2 ,(挑選適當的 Xn 初值可以快速收斂,只要計算兩三次就可得到正確數值)

其原理為,

X = [X + A/X]/2
2X = X + A/X
2X2 = X2 + A
X2 = A
X = A1/2

方法二是我從 Engineering Formulas 這本書學到的,此書為 Reiner Gieck, Kurt Gieck 合著 McGraw-Hill 出版 ISBN 9780070234550,它是我在公司文管中心發現的寶藏。

市售的計算機,開平方根通常利用二進制的長除法計算,任意次方計算會以對數或是利用牛頓迭代法求解。

在網際網路尚未發達前,這類工具書對工程師是非常重要的,尤其需要常常查工程或數學公式很有用。

[轉]讓win7更新完不自動重新開機

來源:http://pcuser.pixnet.net/blog/category/1585482

想要解決Windows的bug及漏洞,一定要勤於線上更新系統檔案,但是有時更新之後會要求你一定要重新開機,更新後的系統元件才會生效。雖然可以延後重新開機對話盒的跳出時間,但是有時明明就正在工作無法關機,偏偏一段時間就要提醒你重開機一次,真的很煩!其實在Windows 7中,可以完全關閉Windows Update以後需要重新開機的窘境,讓你一路順暢地把該做的工作做完,再從容的重新啟動電腦喔~~

步驟1

按下【開始】功能表以後,在底下的搜尋欄位中輸入「gpedit.msc」,經過一段時間搜尋後,點擊上方的「gpedit」執行。

 

步驟2

開啟「本機群組原則編輯器」視窗以後,展開「電腦設定」→「系統管理範本」→「Windows元件」,在右窗格中用滑鼠雙擊「Windows Update」。

 

步驟3

接著在右窗格中找到「有使用者登入時不自動重新開機以完成排定的自動更新安裝」後,在上面按一下滑鼠右鍵,跳出選單以後選擇【編輯】

 

步驟4

跳出視窗以後,預設是「尚未設定」,改選擇「已啟用」按下〔確定〕即可。

 

步驟5

確定狀態變更為「啟用」,就可以關閉這個視窗,然後再去試試更新。

 

步驟6

更新完畢後原先會看到「立即重新啟動電腦」字樣就沒有囉,直接就是順利安裝完畢。從此可以利用工作時間順便更新,也不用擔心還要等待重新開機才能繼續工作。