A. linux操作系統故障處理-ext4文件系統超級塊「can't read superblock」損壞修復
前幾天在廣州參加植物病毒學會議,一邊聽會一邊開著TeamViewer遠程連接實驗室裝有linux系統的工作站跑程序幹活。有一天下午發現TeamViewer顯示伺服器離線,原來是因為施工導致停電。Anyway, 不重要,發微信讓小青兒給我重啟伺服器,結果發現重啟不了,大概就是這個界面。
怎麼著都進不去圖形界面,簡而言之,工作站重啟不了了。索性不管了,好好聽報告,心想回到福州再收拾工作站。回到福州第一件事就是坐下來重啟工作站,發現無論怎麼折騰都進不去系統。
雖然圖形界面進不去,好在還能夠在命令行下進行操作。當看到 /bioinfor ,這個存放目錄的路徑下啥都沒有的時候,這可是我所有的數據啊!如果這個盤里的數據沒了,各個合作者還不得把我手撕了。想到這里,冷汗差點下來了。
於是開始尋找解決方法。
首先得想辦法進入系統,在反復地 sudo reboot 都無法進入系統之後,通過 df -h 也看不到/dev/sda(也就是掛載到/bioinfor路徑的磁碟)信息。然後猜測是不是因為磁碟以及分區表之類出現了錯誤導致不能進入系統。通過 sudo vi /etc/fstab 將除了系統安裝盤之外的所有硬碟的掛載信息全部注釋掉,再 reboot , 這時候果然可以進入圖形界面系統了。但依然看不到 /bioinfor 盤下的數據。能夠開機就讓我放心了很多。通過 gparted 工具,能夠看到/dev/sda硬碟里used space大概是1.7T,還剩下1.9T左右,這就表示我的數據還在。試圖通過 sudo umount /dev/sda 先取消掛載,再重新 sudo mount /dev/sda /bioinfor 掛載到/bioinfor路徑,結果報錯。
報錯信息顯示:
搜索網頁發現,有一個哥們經歷了跟我一樣的遭遇, 意外斷電造成mount掛載硬碟報錯 。所以,這次事故是因為意外斷電,基本實錘了。
但到底什麼是superblock呢?
繼續搜索,直到讀到一篇技術文章 linux操作系統故障處理,ext4文件系統超級快損壞修復 。本文可以忽略,但這篇技術文章得認真讀讀。裡面講解了磁頭,磁軌,柱面,扇區,以及硬碟容量等等概念,以及最重要的inode和block,Superblock(超級塊)概念。
既然報錯提示Superblock出了問題,那我們就應該從這里入手。linux系統提供了一個磁碟命令 fsck 來嘗試對設備進行修復。但可惜,用這個命令的時候,都會提醒你,應該安裝最新的 fsck 工具包。
提示如下:
根據這篇文章 E2FSCK: how to handle the 「metadata_csum」 error by advancing the e2fsck version beyond default installed version 的提示,需要安裝1.43X的 e2fsck , 安裝方法小結如下。
檢驗一下是否更新成功:
能夠看到已經更新到1.43.5版本。
安裝完之後,開始對磁碟進行修復,命令如下:
一般都能修復完畢,然後可以再進行取消掛載或者重新掛載的操作。看到數據都還完好無缺地在電腦上,還處於後怕的我趕緊掏出移動硬碟進行原始數據的備份。
本次debug結束
這篇技術日誌對讀者可參考性並不高,是因為應用場合實在是少,(試想誰會天天斷電呢),但還是有一些體會和感悟:
B. Linux日誌式文件系統面面觀
文件系統是用來管理和組織保存在磁碟驅動器上的數據的系統軟體,其實現了數據完整性的保 證,也就是保證寫入磁碟的數據和隨後讀出的內容的一致性。除了保存以文件方式存儲的數據以外,一個文件系統同樣存儲和管理關於文件和文件系統自身的一些重要信息(例如:日期時間、屬主、訪問許可權、文件大小和存儲位置等等)。這些信息通常被稱為元數據(metadata)。
由於為了避免磁碟訪問瓶頸效應,一般文件系統大都以非同步方式工作,因此如果磁碟操作被突然中斷可能導致數據被丟失。例如如果出現這種情況:如果當你處理一個在linux的ext2文件系統上的文檔,突然機器崩潰會出現什麼情況?
有這幾種可能:
*當你保存文件以後,系統崩潰。這是最好的情況,你不會丟失任何信息。只需要重新啟動計算機然後繼續工作。
*在你保存文件之前系統崩潰。你會丟失你所有的工作內容,但是老版本的文檔還會存在。
*當正在將保存的文檔寫入磁碟時系統崩潰。這是最糟的情況:新版文件覆蓋了舊版本的文件。這樣磁碟上只剩下一個部分新部分舊的文件。如果文件是二進制文件那麼就會出現不能打開文件的情況,因為其文件格式和應用所期待的不同。
在最後這種情況下,如果系統崩潰是發生在驅動器正在寫入元數據時,那麼情況可能更糟。這時候就是文件系統發生了損壞,你可能會丟失整個目錄或者整個磁碟分區的數據。
linux標准文件系統(ext2fs)在重新啟動時會通過調用文件掃描工具fsck試圖恢復損壞的元數據信息。由於ext2文件系統保存有冗餘的關鍵元數據信息的備份,因此一般來說不大可能出現數據完全丟失。系統會計算出被損壞的數據的位置,然後或者是通過恢復冗餘的元數據信息,或者是直接刪除被損壞或是元數據信息損毀的文件。
很明顯,要檢測的文件系統越大,檢測過程費時就越長。對於有幾十個G大小的分區,可能會花費很長時間來進行檢測。由於Linux開始用於大型伺服器中越來越重要的應用,因此就越來越不能容忍長時間的當機時間。這就需要更復雜和精巧的文件系統來替代ext2。
因此就出現了日誌式文件系統(journalling filesystems)來滿足這樣的需求。
什麼是日誌式文件系統
這里僅僅對日誌式文件系統進行簡單的說明。如果需要更深入的信息請參考文章日誌式文件系統,或者是日誌式文件系統介紹。
大多數現代文件系統都使用了來自於資料庫系統中為了提高崩潰恢復能力而開發的日誌技術。磁碟事務在被真正寫入到磁碟的最終位置以前首先按照順序方式寫入磁碟中日誌區(或是log區)的特定位置。
根據日誌文件系統實現技術的不同,寫入日誌區的信息是不完全一樣的。某些實現技術僅僅寫文件系統元數據,而其他則會記錄所有的寫操作到日誌中。
現在,如果崩潰發生在日誌內容被寫入之前發生,那麼原始數據仍然在磁碟上,丟失的僅僅是最新的更新內容。如果當崩潰發生在真正的寫操作時(也就是日誌內容已經更新),日誌文件系統的日誌內容則會顯示進行了哪些操作。因此當系統重啟時,它能輕易根據日誌內容,很快地恢復被破壞的更新。
在任何一種情況下,都會得到完整的數據,不會出現損壞的分區的情況。由於恢復過程根據日誌進行,因此整個過程會非常快只需要幾秒鍾時間。
應該注意的是使用日誌文件系統並不意味著完全不需要使用文件掃描工具fsck了。隨機發生的文件系統的硬體和軟體錯誤是根據日誌是無法恢復的,必須藉助於fsck工具。
目前Linux環境下的日誌文件系統
在下面的內容里將討論三種日誌文件系統:第一種是ext3,由Linux內核Stephen Tweedie開發。ext3是通過向ext2文件系統上添加日誌功能來實現的,目前是redhat7.2的默認文件系統;Namesys開發的ReiserFs日誌式文件系統,可以下載,目前Mandrake8.1採用該日誌式文件系統。SGI在2001年三月發布了XFS日誌式文件系統。可以在 oss.sgi.com/projects/xfs/下載。下面將對這三種日誌文件系統採用不同的工具進行檢測和性能測試。
安裝ext3
關於ext3文件系統技術方面的問題請參考Dr. Stephen Tweedie的論文和訪談。ext3日誌式文件系統直接來自於其祖先ext2文件系統。其具有完全向後兼容的關鍵特性,實際上其僅僅是在ext2日誌式文件系統上添加了日誌功能。其最大的缺點是沒有現代文件系統所具有的能提高文件數據處理速度和解壓的高性能。
ext3從 2.2.19開始是作為一個補丁方式存在的。如果希望對內核添加對ext3文件系統的支持,就需要使用補丁,可以得到補丁程序,一共需要如下文件:
* ext3-0.0.7a.tar.bz2:內核補丁
* e2fsprogs-1.21-WIP-0601.tar.bz2 支持ext3的e2fsprogs程序套件
拷貝linux-2.2.19.tar.bz2和ext3-0.0.7a.tar.bz2到/usr/src目錄下,進行解壓:
mv linux linux-old
tar -Ixvf linux-2.2.19.tar.bz2
tar -Ixvf ext3-0.0.7a.tar.bz2
cd linux
cat ../ext3-0.0.7a/linux-2.2.19.kdb.diff | patch -sp1
cat ../ext3-0.0.7a/linux-2.2.19.ext3.diff | patch -sp1
首先對內核添加SGI的kdb內核調試器補丁,第二個是ext3文件系統補丁。下來就需要配置內核,對文件系統部分的"Enable Second extended fs development code"回答Yes。然後編譯。
內核編譯安裝以後,需要安裝e2fsprogs軟體套件:
tar -Ixvf e2fsprogs-1.21-WIP-0601.tar.bz2
cd e2fsprogs-1.21
./configure
make
make check
make install
下來要做的工作就是在分區上創建一個ext3文件系統,使用新內核重新啟動,這時候你有兩種選擇創建新的日誌文件系統或者對一個已有的ext2文件系統升級到ext3日誌文件系統。
對於需要創建新ext3文件系統的情況下,只需要使用安裝的e2fsprogs軟體包中的mke2fs命令加-f參數就可以創建新的ext3文件系統:
mke2fs -j /dev/xxx
這里/dev/xxx是希望創建ext3文件系統的新分區。-j參數表示創建ext3而不是ext2文件系統。可以使用參數"-Jsize="來指定希望的日誌區大小(n單位為M)。
升級一個已有的ext2,使用tune2fs就可以了:
tune2fs -j /dev/xxx
你可以對正在載入的文件系統和沒有載入的文件系統進行升級操作。如果當前文件系統正在被載入,則文件.journal會在文件系統載入點的所在目錄被創建。如果是升級一個當時沒有載入的文件系統,則使用隱含的系統inode來記錄日誌,這時候文件系統的所有內容都會被保留不被破壞。
你可以使用下面的命令載入ext3文件系統:
mount -t ext3 /dev/xxx /mount_dir
由於ext3實際上是帶有日誌功能的ext2文件系統 ,因此一個ext3文件系統可以以ext2的方式被載入。
安裝XFS文件系統
如果需要從技術方面了解XFS文件系統,請參考SGI的XFS文件系統和SGI信息頁面。也可以參考FAQ。
XFS是一個SGI開發的linux環境下的日誌文件系統,它是一個成熟的技術,最初是使用在IRIX系統上的文件系統。XFS遵循GPL版權申明。目前xfs文件系統最新版本是1.02。下載得到對內核xfs文件系統支持補丁或者直接下載RPM包方式的內核,下面我們就以補丁方式說明如何對2.4.14內核使用xfs。首先下載如下內容
patch-2.4.14-xfs-1.0.2.bz2
patch-2.4.14-xfs-1.0.2-kdb.bz2
拷貝Linux內核linux-2.4.2.tar.bz2到 /usr/src目錄下,修改老的內核目錄名,然後解壓新內核:
mv linux linux-old
tar -Ixf inux-2.4.2.tar.bz2
拷貝每個每個補丁到內核源碼目錄下(例如:/usr/src/linux),並打補丁:
zcat patch-2.4.14-xfs-1.0.2.bz2 | patch -p1
zcat patch-2.4.14-xfs-1.0.2-kdb.bz2 | patch -p1
然後配置內核,打開文件系統部分的內核選項:"XFS filesystem support" (CONFIG_XFS_FS)和"Page Buffer support" (CONFIG_PAGE_BUF)。同時需要升級下面這些系統工具到下面或更高的版本:
motils-2.4.0
autoconf-2.13
e2fsprogs-devel-1.18
安裝新內核並重啟伺服器。
然後下載xfs工具。這個軟體包包括下面的命令來處理文件系統,使用下面的命令來安裝該軟體包::
tar -zxf xfsprogs-1.2.0.src.tar.gz
cd xfsprogs-1.2.0
make configure
make
make install
安裝這些命令以後,就可以創建新的XFS文件系統:
mkfs -t xfs /dev/xxx
如果xxx是一個已經存在的文件系統,那麼就需要使用"-f"參數來創建新分區,但是記得這將會破壞該分區的所有數據。
mkfs -t xfs -f /dev/xxx
創建以後就可以使用基於下面的命令載入新文件系統:
mount -t xfs /dev/xxx /mount_dir
安裝ReiserFS文件系統
如果希望更多地從技術方面了解reiserFS文件系統,請參考NAMESYS和FAQ。
ReiserFS文件系統從2.4.1-pre4開始就是Linux內核的正式支持的文件系統了。為了使用reiserFS文件系統那你首先需要在系統上安裝文件系統支持工具(如:創建ReiserFS文件系統的mkreiserfs工具)。最新的ReiserFS文件系統版本可以以補丁的方式添加到2.2.x或者2.4.x內核中。這里我們以2.2.19為例:
第一步,首先下在內核源碼,並下在ReiserFS文件系統的2.2.19補丁 ,目前補丁最新版本是linux-2.2.19-reiserfs-3.5.34-patch.bz2。同時應該下載工具軟體包:reiserfsprogs-3.x.0j.tar.gz。
然後解壓內核源碼和補丁包到/usr/src中:
tar -Ixf linux-2.2.19.tar.bz2
bzcat linux-2.2.19-reiserfs-3.5.34-patch.bz2 | patch -p0
編譯內核支持reiserfs,安裝內核。然後安裝文件系統工具軟體:
cd /usr/src/linux/fs/reiserfs/utils
make
make install
安裝新內核並重新啟動。現在就可以創建新的'reiserfs文件系統,並載入:
mkreiserfs /dev/xxxx
mount -t reiserfs /dev/xxx /mount_dir
文件系統性能測試
測試環境使用的計算機環境如下:Pentium III - 16 Mb RAM - 2 Gb HD,操作系統為RedHat6.2。所有的文件系統都能正常工作,所以就進行benchmark分析來對它們進行性能比較。首先我直接拔掉系統電源以模擬系統掉電情況,以測試日誌文件系統恢復過程。所有的文件系統都成功地經過了文件掃描檢測階段,在數秒以後系統都經過了掃描然後正常啟動了系統。
下一步就採用了bonnie++性能測試程序進行測試,這個程序對一個文件進行資料庫類型的訪問,進行了創建、讀和刪除小文件,這些操作對於Squid、INN或者Maildir格式的郵件伺服器程序(qmail)是最常見的操作。性能測試命令為:
bonnie++ -d/work1 -s10 -r4 -u0
其對載入在/work1目錄下的文件系統進行了10Mb(-s10)的測試。因此在執行測試之前必須創建適當類型的文件系統並載入到目錄/work1下。其他的參數指定內存大小(-r4)的M數,和以root身份運行測試程序,測試結果如下:
每種測試都有兩組數據:文件系統速度(K/sec)和CPU佔用率(%CPU)。速度越高,文件系統越好。而對於CPU率來說,數字越小性能越好。可以看到Reiserfs文件系統在文件操作方面(Sequential Create和Random Create部分的) 的性能最好,超出其他文件系統10倍之多。在其他方面(Sequential Output和Sequential Input)則和其他文件系統性能不相上下。對於其他文件系統則沒有特別明顯的區別。XFS性能接近ext2文件系統,ext3文件系統則比ext2要稍微慢上一些(因為記錄日誌需要一些額外的時間)。 最後使用從得到的性能測試程序mongo,並對其進行了修改以對三種日誌文件系統進行測試。這里在mongo.pl程序中添加了添加了載入xfs和ext3文件系統的命令,並對其進行格式化處理,然後就開始性能測試分析。 該腳本格式劃分區/dev/xxxx,載入其並在每個階段運行指定數目的進程:創建、拷貝、符號連接處理、讀、顯示文件狀態信息、重命名和刪除文件。同時,該程序在創建和拷貝階段以後會計算分段數(fragmentation)。
Fragm = number_of_fragments / number_of_files
可以在結果文件中得到同樣的測試比較結果:
log - 原始結果
log.tbl - 比較程序的輸出結果
log_table - 表格式的結果
下面的命令進行測試:
mongo.pl ext3 /dev/hda3 /work1 logext3 1
如果要測試其他文件系統,就需要把上面命令的參數中的ext3修改為reiserfs或xfs。其他參數分別為要載入的分區,載入路徑,保存測試結果的文件名及啟動的進程數。
下面的表格是測試結果。數據單位為秒。值越低性能越好。第一個表格測試使用的數據塊大小為100位元組,第二個表格為1000位元組,最後一個為10000位元組
從上面的表格可以看到ext3在狀態刪除和重命名方面要性能更好一些,而ReiserFS文件系統在文件創建和拷貝性能表現更出色。同時也可以看到reiserFS正如其技術文檔提到的其在小文件處理方面性能相當出色。
結論
目前Linux至少有兩個健壯可靠的日誌文件系統可供選擇(XFS和reiserFS),其都得到了廣泛的應用。例如Mandrake8.1就默認支持reiserFS文件系統。
從性能測試的結果可以看到,reiserFS是最好的選擇。
C. linux下NTFS文件系統出現錯誤要用什麼工具修復呢, 類似windows下工具下的查錯。 fsck不支持NTFS。
首先要看抄什麼錯誤,某些linux在不配置之前,是無法訪問NTFS文件系統的。(RHEL6.0,這么廣泛的版本也無法直接訪問NTFS,ubuntu倒是裝完直接就可以。)
你要確定是NTFS文件系統出錯,還是你的linux本身就不支持訪問。
別弄巧成拙,把數據弄丟了。如果有條件先把NTFS文件系統的區放在windows下跑一下。
看看是否能讀取。
D. wechatout套餐沒有購買名額
沒有WeChat Out是因為微信並沒有在中國大陸推出這個功能,只面向海外用戶提供WeChat Out,綁定國內手機號碼的微信是沒有的。 WeChat Out是微信提供的費率較低的全球網路電話,用戶也需要充值後才可使用,充值過後即可撥打其他國家或地區的號碼,撥打後微信採用網路電話呼入自己綁定的號碼然後就可以進行暢聊。 (4)fsck最新版本擴展閱讀 WeChat Out功能替換了中文版微信中「收付款」。點擊圖標後,用戶會進入通訊錄界面,撥叫電話的界面則與iOS的通話界面類似。 該功能已對香港、美國、印度用戶開放 [2] ,美國微信用戶打向中國,每分鍾為0.90美分,不到人民幣6分錢,最低充值0.99美元可以往中國打
E. ubuntu下關於ext4碎片整理,fsck的/分區掃描和manpange的語言問題
fsck需要掃描未掛載的磁碟,最好是不要在系統運行到時候弄,而且fsck不是整理碎片而是磁碟檢查。沒有磁碟碎片這一說,不要被FAT的思維定勢誤導。所謂高人寫的關於EXT也有碎片的說法只能讓人說這個偽科學寫得真科學……
F. linux下執行fsck命令
在執行fsck命令時,fsck命令如果發現有孤立的文件或目錄,這些孤立的文件或目錄對於系統管理員或用戶來說,就無法訪問到它,因為它與它的上級目錄失去了關聯。
如果不允許fsck把這些孤立的文件或目錄找回來的話,那麼fsck命令就會破壞這些文件或目錄,徹底丟失這些文件或目錄,用戶或系統管理員永遠也無法找回它們了。
(6)fsck最新版本擴展閱讀
Linux主要被用作伺服器的操作系統,因為它的廉價、靈活性及Unix背景。傳統上,以Linux為基礎的「LAMP(Linux,Apache,MySQL,Perl/PHP/Python的組合)」技術,除了已在開發者群體中廣泛流行,它提供網站服務供應商最常使用的平台。
基於其低廉成本與高度可設置性,Linux常常被應用於嵌入式系統,例如機頂盒、行動電話及移動裝置等。在行動電話上,Linux已經成為Symbian OS的主要競爭者;而在移動裝置上,則成為Windows CE與Palm OS外之另一個選擇。
TiVo數碼攝影機使用了經過客制化後的Linux。此外,有不少硬體式的網路防火牆及路由器,例如部分LinkSys的產品,其內部都是使用Linux來驅動、並採用了操作系統提供的防火牆及路由功能。
採用Linux的超級電腦亦愈來愈多,根據2008年11月的TOP500超級電腦列表,現時世上最快速的超級電腦使用Linux作為其操作系統。而在表列的500套系統里,採用Linux為操作系統的,佔了439組(即87.8%)。
2006年開始發售的SONY PlayStation 3亦可使用Linux的操作系統,它有一個能使其成為一個桌面系統的Yellow Dog Linux。
之前,Sony亦曾為他們的PlayStation 2推出過一套名為PS2 Linux的DIY組件。Ubuntu自9.04版本,恢復了PPC支持(包括PlayStation 3)。
而隨著OLPC的XO-1,華碩的Eee PC等低價電腦的推行,許多人樂觀的認為在低端PC市場,linux的市場佔有率正在快速的增長。
但在Windows進入此一市場後,Linux的市佔率快速下滑。現在Windows系統在所有的PC市場中,都佔有絕對優勢。
主要用途:虛擬化,資料庫伺服器,Web伺服器,應用伺服器,跳轉盒(Jump box),日誌伺服器,開發平台,Google搜索設備,入侵檢測系統。
G. Centos文件系統EXT3與EXT4的主要區別
Ext4可以提供更佳的性能和可靠性,還有更為豐富的功能:
1,與Ext3兼容。 執行若干條命令,就能從 Ext3在線遷移到Ext4,而無須重新格式化磁碟或重新安裝系統。原有Ext3數據結構照樣保留,Ext4作用於新數據,當然,整個文件系統因此也就獲得了 Ext4所支持的更大容量。
2,更大的文件系統和更大的文件。較之Ext3目前所支持的最大16TB文件系統和最大2TB文件,Ext4 分別支持1EB(1,048,576TB, 1EB=1024PB, 1PB=1024TB)的文件系統,以及16TB的文件。
3,無限數量的子目錄。 Ext3目前只支持32,000個子目錄,而Ext4支持無限數量的子目錄。
4, Extents。Ext3採用間接塊映射,當操作大文件時,效率極其低下。
5,多塊分配。當寫入數據到 Ext3文件系統中時,Ext3的數據塊分配器每次只能分配一個4KB的塊,寫一個100MB文件就要調用25,600次數據塊分配器,而Ext4的多塊分配器「multiblock allocator」(mballoc) 支持一次調用分配多個數據塊。
6,延遲分配。Ext3的數據塊分配策略是盡快分配,而Ext4和其它現代文件操作系統的策略是盡可能地延遲分配,直到文件在cache中寫完才開始分配數據塊並寫入磁碟,這樣就能優化整個文件的數據塊分配,與前兩種特性搭配起來可以顯著提升性能。
7,快速 fsck。以前執行fsck第一步就會很慢,因為它要檢查所有的inode,現在Ext4給每個組的 inode 表中都添加了一份未使用inode的列表,今後fsck Ext4文件系統就可以跳過它們而只去檢查那些在用的inode了。
8,日誌校驗。日誌是最常用的部分,也極易導致磁碟硬體故障,而從損壞的日誌中恢復數據會導致更多的數據損壞。Ext4的日誌校驗功能可以很方便地判斷日誌數據是否損壞,而且它將Ext3的兩階段日誌機制合並成一個階段,在增加安全性的同時提高了性能。
9,「無日誌」(No Journaling)模式。日誌總歸有一些開銷,Ext4允許關閉日誌,以便某些有特殊需求的用戶可以藉此提升性能。
10,在線碎片整理。盡管延遲分配、多塊分配和extents能有效減少文件系統碎片,但碎片還是不可避免會產生。Ext4支持在線碎片整理,並將提供e4defrag工具進行個別文件或整個文件系統的碎片整理。
11,inode相關特性。Ext4支持更大的inode,較之Ext3默認的inode大小128位元組,Ext4為了在 inode中容納更多的擴展屬性,默認inode大小為256位元組。Ext4 還支持快速擴展屬性和inode保留。
12,持久預分配。P2P軟體為了保證下載文件有足夠的空間存放,常常會預先創建一個與所下載文件大小相同的空文件,以免未來的數小時或數天之內磁碟空間不足導致下載失敗。Ext4在文件系統層面實現了持久預分配並提供相應的API,比應用軟體自己實現更有效率。
13,默認啟用 barrier。磁碟上配有內部緩存,以便重新調整批量數據的寫操作順序,優化寫入性能,因此文件系統必須在日誌數據寫入磁碟之後才能寫commit記錄。Ext4默認啟用 barrier,只有當barrier之前的數據全部寫入磁碟,才能寫barrier之後的數據。
(7)fsck最新版本擴展閱讀:
EXT3是第三代擴展文件系統(英語:Third extended filesystem,縮寫為ext3),是一個日誌文件系統,常用於Linux操作系統。
它是很多Linux發行版的默認文件系統。Stephen Tweedie在1999年2月的內核郵件列表中,最早顯示了他使用擴展的ext2,該文件系統從2.4.15版本的內核開始,合並到內核主線中。
EXT4是第四代擴展文件系統(英語:Fourth extended filesystem,縮寫為 ext4)是Linux系統下的日誌文件系統,是ext3文件系統的後繼版本。
Ext4是由Ext3的維護者Theodore Tso領導的開發團隊實現的,並引入到Linux2.6.19內核中。
Ext4產生原因是開發人員在Ext3中加入了新的高級功能,但在實現的過程出現了幾個重要問題:
(1)一些新功能違背向後兼容性
(2)新功能使Ext3代碼變得更加復雜並難以維護
(3)新加入的更改使原來十分可靠的Ext3變得不可靠。
從2006年6月份開始,開發人員決定把Ext4從Ext3中分離出來進行獨立開發。Ext4的開發工作從那時起開始進行,但大部分Linux用戶和管理員都沒有太關注這件事情,直到2.6.19內核在2006年11月的發布。
2008年12月25日,Linux Kernel 2.6.28的正式版本發布。隨著這一新內核的發布,Ext4文件系統也結束實驗期,成為穩定版。
參考資料:網路:Ext3
參考資料:網路:Ext4
H. Windows需要碎片整理,為什麼Linux不需要
如果你是一個Linux用戶,你可能會聽說Linux的文件系統不需要碎片整理。你也可能會注意到Linux的發行版本也都沒有磁碟碎片整理的功能。這是為什麼呢?要理解為什麼Linux的文件系統不會想Windows的文件系統一樣產生碎片,你首先要明白碎片到底是如何產生的,還有這兩大操作系統的文件系統的工作方式到底有什麼不同。
什麼是磁碟碎片?
很多Windows的用戶,甚至包括一些沒有經驗的用戶,都相信定時整理文件系統中的碎片會讓他們的電腦運行得更快。但他們都不知道這是為什麼。
簡單來說,一個硬碟驅動器裡麵包含了很多扇區,每一個扇區都可以存儲一小塊數據。對於文件,尤其是比較大的文件來說,他們必須要存儲在很多不同的扇區內。假設你的文件系統中有很多不同的文件,每一個文件都被存儲在連續的扇區群中。然後,你對增加了其中某一個文件的大小。文件系統首先會嘗試對該文件新增加的部分存儲在緊挨著原來的扇區群的某個扇區中。但是如果當中沒有足夠的連續扇區,這個文件就必須要被分解成多個小塊,這些操作對於你來說都是可見的。當你的硬碟讀取這些文件的時候,他的磁頭必須在不同的物理位置間跳轉以讀取連續的扇區群,這會降低它的速度。
碎片整理就是一個通過逐位(位是文件在磁碟中存儲的最小單位)移動文件來減少碎片的精密的過程,以此來確保每一個文件在硬碟中都是連續存儲的。
當然,對於固態硬碟來說這又有點不一樣,固態硬碟不需要移動文件也不需要碎片整理。因為對一個SSD(固態硬碟)做碎片整理會減少它的壽命。而且,在最新版本的Windows系統中,你也不再需要為碎片整理擔心,因為Windows會自動幫你完成。
Windows的文件系統如何工作
從前微軟使用的FAT文件系統——最後一次作為默認系統被看到是在Windows 98和ME,盡管這個系統還在USB驅動器中使用——並不能夠很好地排列文件。當你在FAT文件系統中保存文件時,它會盡可能地將文件排列在磁碟的首部。當你存放下一個文件時,它會將這個文件直接存放在第一個文件的後面,以此類推。所以當文件變大,永遠都會有碎片產生,因為文件的旁邊已經沒有空間來存放增加的部分。
微軟在Windows XP和2000中使用的較新的NTFS文件系統就嘗試變得更聰明一點。這個文件系統會在文件周圍放置更多名為」緩沖區「的自由空間,但是,任何一個Windows用戶都會告訴你,NTFS文件系統總有一天也會產生碎片的。
因為文件系統這樣的表現,他們需要碎片整理來保持性能。微軟只能在最新版的Windows系統中通過在後台自動運行碎片整理程序來減輕這個問題。
Linux的文件系統如何工作
Linux的ext2,ext3,ext4文件系統——ext4是Ubuntu和目前大多發行版所採用的文件系統——會以一種更加智能的方式來放置文件。Linux的文件系統會將文件分散在整個磁碟,在文件之間留有大量的自由空間,而不是像Windows那樣將文件一個接一個的放置。當一個文件被編輯了並且變大了,一般都會有足夠的自由空間來保存文件。如果碎片真的產生了,文件系統就會嘗試在日常使用中將文件移動來減少碎片,所以不需要專門的碎片整理程序。
因為這樣的工作方式,你可能會在你的文件系統塞滿之後看到碎片。如果文件系統95%(甚至80%)的空間被佔用了,你就會開始看到一些碎片。然而,這樣的文件系統本來就是設計來在普通使用中減少碎片的。
如果你真的在Linux上出現了碎片的煩惱,你可能就需要一個更大的硬碟了。如果你真的需要對一個文件系統做碎片整理,最簡單的可能也是最可靠的方法就是將所有文件拷貝出來,然後清空原來的分區,再將文件拷貝回去。文件系統就會在你拷貝回去的過程中智能地將文件放置好。
你可以使用fsck命令來檢測一下一個Linux文件系統的碎片化程度,只需要在輸出中查看非連續節點個數(non-contiguous inodes)就可以了。
I. fsck.ext4 命令源碼在哪個壓縮包裡面啊
DOS系統命令都能用輸入command能查看面命令 環境變數PATH面應用程序名作命令用
面總結些東西內容太
關某命令詳細信息請鍵入 HELP 命令名
XP.CMD命令全
關某命令詳細信息請鍵入 HELP 命令名ASSOC 顯示或修改文件擴展名關聯AT 計劃計算機運行命令程序ATTRIB 顯示或更改文件屬性BREAK 設置或清除擴展式 CTRL+C 檢查CACLS 顯示或修改文件訪問控制列表(ACLs)CALL 另批處理程序調用CD 顯示前目錄名稱或其更改CHCP 顯示或設置代碼頁數CHDIR 顯示前目錄名稱或其更改CHKDSK 檢查磁碟並顯示狀態報告CHKNTFS 顯示或修改啟間磁碟檢查CLS 清除屏幕CMD 打另 Windows 命令解釋程序窗口COLOR 設置默認控制台前景背景顏色COMP 比較兩或兩套文件內容COMPACT 顯示或更改 NTFS 區文件壓縮CONVERT FAT 卷轉換 NTFS您能轉換前驅器COPY 至少文件復制另位置DATE 顯示或設置期DEL 刪除至少文件DIR 顯示目錄文件目錄DISKCOMP 比較兩軟盤內容DISKCOPY 軟盤內容復制另軟盤DOSKEY 編輯命令行、調用 Windows 命令並創建宏ECHO 顯示消息或命令顯打或關ENDLOCAL 結束批文件環境更改本化ERASE 刪除至少文件EXIT 退 CMD.EXE 程序(命令解釋程序)FC 比較兩或兩套文件並顯示同處FIND 文件搜索文字字元串FINDSTR 文件搜索字元串FOR 套文件每文件運行指定命令FORMAT 格式化磁碟便跟 Windows 使用FTYPE 顯示或修改用於文件擴展名關聯文件類型GOTO Windows 命令解釋程序指向批處理程序某標明行GRAFTABL 啟用 Windows 圖像模式顯示擴展字元集HELP 提供 Windows 命令幫助信息IF 執行批處理程序條件性處理LABEL 創建、更改或刪除磁碟卷標MD 創建目錄MKDIR 創建目錄MODE 配置系統設備MORE 顯示結屏幕MOVE 文件目錄移另目錄PATH 顯示或設置執行文件搜索路徑PAUSE 暫停批文件處理並顯示消息POPD 原 PUSHD 保存前目錄值PRINT 列印文本文件PROMPT 更改 Windows 命令提示符PUSHD 保存前目錄其進行更改RD 刪除目錄RECOVER 問題磁碟恢復讀信息REM 記錄批文件或 CONFIG.SYS 注釋REN 重命名文件RENAME 重命名文件REPLACE 替換文件RMDIR 刪除目錄SET 顯示、設置或刪除 Windows 環境變數SETLOCAL 始批文件環境更改本化SHIFT 更換批文件替換參數位置SORT 輸入進行類START 啟另窗口運行指定程序或命令SUBST 路徑跟驅器號關聯TIME 顯示或設置系統間TITLE 設置 CMD.EXE 窗口標題TREE 圖形模式顯示驅器或路徑目錄結構TYPE 顯示文本文件內容VER 顯示 Windows 版本VERIFY 告訴 Windows 否驗證文件否已確寫入磁碟VOL 顯示磁碟卷標序列號XCOPY 復制文件目錄樹
appwiz.cpl------------添加刪除程序
control userpasswords2--------用戶帳戶設置
cleanmgr-------垃圾整理
CMD--------------命令提示符作 Windows 附件PingConvert 些能圖形環境 使用功能要藉助完
cmd------jview察看Java虛擬機版本
command.com------調用則系統內置 NTVDM DOS虛擬機完全類似 Virtual PC 虛擬環境系統本身聯系我命令提示符運行 DOS 程序實際 自轉移 NTVDM虛擬機 CMD 本身沒關系
calc-----------啟計算器
chkdsk.exe-----Chkdsk磁碟檢查
compmgmt.msc---計算機管理
conf-----------啟 netmeeting
control userpasswords2-----User Account 許可權設置
devmgmt.msc--- 設備管理器
diskmgmt.msc---磁碟管理實用程序
dfrg.msc-------磁碟碎片整理程序
drwtsn32------ 系統醫
dvdplay--------啟Media Player
dxdiag-----------DirectX Diagnostic Tool
gpedit.msc-------組策略編輯器
gpupdate /target:computer /force 強制刷新組策略
eventvwr.exe-----事件查看器
explorer-------打資源管理器
logoff---------注銷命令
lusrmgr.msc----本機用戶組
msinfo32---------系統信息
msconfig---------系統配置實用程序
net start (servicename)----啟該服務
net stop (servicename)-----停止該服務
notepad--------打記事本
nusrmgr.cpl-------同control userpasswords打用戶帳戶控制面板
Nslookup-------IP址偵測器
oobe/msoobe /a----檢查XP否激
perfmon.msc----計算機性能監測程序
progman--------程序管理器
regedit----------注冊表編輯器
regedt32-------注冊表編輯器
regsvr32 /u *.dll----停止dll文件運行
route print------查看路由表
rononce -p ----15秒關機
rsop.msc-------組策略結集
rundll32.exe rundll32.exe %Systemroot%System32shimgvw.dll,ImageView_Fullscreen----啟空白Windows 圖片傳真查看器
secpol.msc--------本安全策略
services.msc---本服務設置
sfc /scannow-----啟系統文件檢查器
sndrec32-------錄音機
taskmgr-----任務管理器(適用於2000/xp/2003)
tsshutdn-------60秒倒計關機命令
winchat--------XP自帶區域網聊
winmsd---------系統信息
winver-----顯示About Windows 窗口
wupdmgr-----------Windows Update
一,編譯之前的准備。
1) 了解代碼組織結構。
Chrome source非常龐大,並且在其主目錄下還包含有工具和組件,任何一個工具和組件也附帶有其源代碼。首先得熟悉這些源代碼的組織結構,在中包含如下子目錄:releases,曾經發布過的chrome源代碼的正式版本;trunk,當前最新的源代碼。由於releases中的代碼比較舊,這里就不做說明了,只說明trunk的結構。在trunk下面有3個重要的目錄,deps包含了chrome編譯和運行所需要的全部組件的代碼。src裡麵包含的則是chrome的主程序的代碼,tools包含的是下載和配置編譯所需要的第三方工具的壓縮包和源代碼,其中就有svn和python這2個比較重要的工具,後面再詳細介紹。暫時做這樣一個簡單的介紹,因為其組織結構比較負責,以後再作補充斧正。
2)如何下載和同步源代碼。
首先談談下載:
1,最簡單的方法是從chrome官網上直接下載源代碼壓縮包,地址是。
2,或者採用svn從trunk/src這個地方heckout,這要求你先在本地建一個源代碼的主目錄。
3,另外一個辦法則是採用google提供的一個部署工具depot_tools。雖然這幾種辦法都可下載完整的源代碼,但目前的情況是:chrome基於Visual Stdio 2005 進行編譯,如果順利完成編譯工作,自然少不了sln文件,較早的源代碼中包含有現成的sln和vcproject文件,但後來做了修改,這些文件被拋棄掉,Google自己開發了一種腳本工具叫做GYP,這個工具採用python編寫,GYP採用了自定義的一套規則,用於生成各種工程文件。而關鍵的python則包含於depot_tools中,因此不論採用什麼方法下載的代碼,都得下載depot_tools這個工具,以獲得必須的工程文件。
depot_tools位於 trunk/tools 下面,包括一個目錄和一個zip格式的壓縮包。
3)關於編譯器
前面提到Chrome採用Visual Stdio 2005進行編譯,根據的說明,需進行如下操作正常編譯
a, 安裝Visual Studio 2005.
b, 安裝Visual Studio 2005 Service Packe 1.
c, 安裝Visual Studio Hotfix 947315.
d, 如果是vista系統,還需安裝Visual Studio 2005 Service Packe 1 Update for Windows Vista.
e, 安裝Windows 2008 SDK,如果是Visual Studio 2008則不需要這一步。
f, 配置Windows 2008 SDK,使2008 SDK成為首選開發庫,以獲得一些新功能和特性。辦法是在開始->程序->Microsoft Windows SDK v6.1 > Visual Studio Registration > Windows SDK Configuration Tool,選擇make current按鈕。也可以在VS裡面手動配置include和libary路徑,效果是一樣的。
二,如何配置工程文件
1,如果是採用depot_tools,那麼從代碼下載到生成sln文件會自動完成。其步驟是
(1)下載depot_tools到本地存儲,假設位於d:/depot_tools.
(2)將d:/depot_tools添加到系統環境變數中。
(3)創建一個源代碼根目錄,假設為 d:/chrome,目錄不得包含空格。
(4)在命令行下切換當前目錄到d:/chrome。
(5)執行命令 gclient config trunk/src ,該命令會首先下載svn和python分別到d:/depot_tools/svn_bin和d:/depot_tools/python_bin。
(6)執行命令 gclient sync 這個命令會調用svn同步源代碼。這個過程會比較漫長。全部完成之後全部源代碼就保存在d:/chrome裡面。未編譯的代碼大約有4個G左右,過程將十分漫長。這樣獲得的源代碼已經包含所有的工程文件,可直接打開。
重點說明一下gclient,它實際上是一個批處理文件,它主要做了如下一些事情,首先設置環境變數,如代碼根目錄,工具根目錄等。其次調用win_tools.bat從伺服器下載svn和python。最後調用python.exe對Chrome.gyp進行解析生成所有工程文件。
另外需要說明的是,gclient sync的過程非常漫長,根據命令行的提示來看總共需要同步67個項目(不是工程),期間可能會因為一些原因導致錯誤而退出這個過程,需要繼續調用sync。比如網路出現故障svn會多次進入sleep狀態然後重試,如果多次失敗就會報錯退出,還有的情況是某些子目錄的屬性問題無法同步,可根據提示進行操作。還有個目前新出現的問題,下面2個目錄「src/webkit/data/layout_tests/LayoutTests」和「src/third_party/WebKit/LayoutTests」的源代碼是從src.webkit.org簽出來的,但是這個網站目前存在問題無法簽出代碼, 需要屏蔽掉這2個目錄,由於裡面是測試代碼,即使丟棄也不會影響整個工程的編譯,方法是打開trunk下面的.gclient文件,向裡面添加如下內容
"custom_deps" : {
"src/webkit/data/layout_tests/LayoutTests":None,
"src/third_party/WebKit/LayoutTests":None腸川慣緞甙等軌勸憨滑,
},
這樣svn就能完成代碼的同步了。最後gclient會調用depot_tools/python_bin/python.exe 對 src/build/gyp_
chromium進行處理,這樣就得到了所有的sln和vcproject文件。
2,如果是下載的代碼壓縮包或者checkout的代碼,代碼目錄裡面沒有sln文件,這個時候需要調用命令行進入源代碼根目錄,然後執行命令 gclient runhooks --force,命令執行後會直接對Chrome.gyp進行解析,生成sln文件。
在實際下載過程中,最開始的時候我用TortoiseSVN從trunk/src checkout源代碼,但是得到的代碼只有幾百兆,執行gclient runhooks --force命令後也沒有找到sln文件,具體原因未知,不建議使用此方式。而直接下載代碼壓縮包的方式沒有嘗試過,不知道是否可行。因此最穩妥的方法還是使用depot_tools來部署和處理源代碼。
三 編譯工程
啟動Visual Studio 2005打開 src/chrome/browser/chrome.sln,或者打開src/build/all.sln,如果打開的是chrome.sln裡麵包含480個工程,而all.sln則包含507個工程,一些09年的編譯說明提到有300左右的工程,可見chrome的代碼變動比較大。對整個解決方案進行編譯,打開需要2個小時才能完成編譯,視硬體環境而定,內存越大越快,推薦4G以上內存,酷睿2核或者4核。編譯完成以後據說會佔用30G的空間。編譯後的文件位於 d:/chorme/chrome/debug 目錄或者 d:/chorme/chrome/release目錄下。
四 chrome涉及的開源項目
Chrome 採用了很多開源項目,這里把它們列出來以備後用,目前Chrome涉及25個開源代碼:
1、Google Breakpad
/src/breakpad
開源的跨開台程序崩潰報告系統。
2、Google URL
/src/googleurl
Google小巧的URL解析整理庫。
3、Skia
/src/skia
矢量圖引擎。
4、Google v8
/src/v8
Google開源的JavaScript引擎。V8實現了ECMA-262第三版的ECMAScript規范,可運行於Windows XP 和 Vista, Mac OS X 10.5 (Leopard), 及 Linux等基於IA-32 或 ARM 的系統之上。V8可單獨運行也可嵌入到任何C++程序中。
5、Webkit
/src/webki
開源的瀏覽器引擎
6、Netscape Portable Runtime (NSPR)
/src/base/third_party/nspr
Netscape Portable Runtime (NSPR) 提供了系統級平台無關的API及類似libc的函數。
7、Network Security Services (NSS)
/src/base/third_party/nss
Network Security Services (NSS) 一套用於支持伺服器端與客戶端安全開發的跨平台函數庫。程序通過NSS可支持SSL v2 and v3, TLS, PKCS #5, PKCS #7, PKCS #11, PKCS #12, S/MIME, X.509 v3 認證及其它一些安全標准。
8、Hunspell
/src/chrome/third_party/hunspell
Spell checker and morphological analyzer library and program designed for languages with rich morphology and complex word compounding or character encoding.
9、Windows Template Library
/src/chrome/third_party/wtl
用於開發Windows程序與UI組件的C++ library。WTL擴展了ATL (Active Template Library) 並提供一套用於controls, dialogs, frame windows, GDI objects等開發的類。
10、Google C++ Testing Framework
/src/testing/gtest
Google用於編寫C++測試的基於xUnit架構的框架,可用於多種平台上:Linux, Mac OS X, Windows, Windows CE, and Symbian。支持自動測試發現,有一套豐富的Assertions斷言,用於可自定義斷言,death tests, fatal and non-fatal failures, various options for running the tests, and XML test report generation.
11、bsdiff 與 bspatch
/src/third_party/bsdiff 及 /src/third_party/bspatch
bsdiff 與 bspatch 用於為二進制文件生成補丁。
12、bzip2
/src/third_party/bzip2
bzip2使用Burrows-Wheeler block sorting text compression 演算法與Huffman編碼壓縮文件。
13、International Components for Unicode (ICU)
/src/third_party/icu38
ICU是一套成熟並被廣泛使用的C/C++ 及 Java 庫,可為軟體提供Unicode與全球化支持。
14、libjpeg
/src/third_party/libjpeg
用於處理JPEG (JFIF)圖像格式的庫。
15、libpng
/src/third_party/libpng
PNG圖像格式庫。支持絕大部分的PNG特性,可擴展。已經被廣泛地使用了13年以上了。
16、libxml
/src/third_party/libxml
C語言的XML解析庫。
17、libxslt
/src/third_party/libxslt
C語言的XSLT庫。
18、LZMA
/src/third_party/lzma_sdk
LZMA為7-Zip軟體中7z格式壓縮所使用的壓縮演算法,有很好的壓縮效果。
19、stringencoders
/src/third_party/modp_b64
一系列高性能的c-string轉換函數,比如:base 64 encoding/decoding。通常比其標准實現快兩倍以上。
20、Netscape Plugin Application Programming Interface (NPAPI)
/src/third_party/npapi
多種瀏覽器使用的跨平台插件架構。
21、Pthreads-w32
/src/third_party/pthread
用於編寫多線程程序的API
22、SCons - a software construction tool
/src/third_party/scons
開源的軟體構建工具——下一代的編譯工具。可以認為SCons是改進過的跨平台配上autoconf/automake與ccache的Make工具的子系統。
23、sqlite
/src/third_party/sqlite
大名鼎鼎的嵌入式資料庫引擎。自管理、零配置、無需伺服器、支持事務。
24、TLS Lite
/src/third_party/tlslite
SSL 3.0, TLS 1.0, and TLS 1.1的Python免費實現庫。TLS Lite支持這些安全驗證方式:SRP, shared keys, and cryptoIDs in addition to X.509 certificates。註:Chrome並不包涵Python。TLS Lite用於Chrome開發過程中的代碼覆蓋、依賴檢查、網頁載入時間測試及生成html結果比較等。
25、zlib
/src/third_party/zlib
zlib為一套用於任意平台與機器的無損數據壓縮的庫,它免費、自由、無任何法律專利問題。