2014年12月19日 星期五

實用 SSD 總整理(三)

使用一段時間之後若 SSD 發生掉速的情形該如何是好呢?一般來說可以先找找看原廠是否有提供抹除工具或是韌體更新工具,除此之外只要 SSD 有支援 security set 指令也可以透過 security erase 回覆到原本的效能水準,既然是 security erase 當然也會清空內部所有資料,因此操作前務必先備份。

可以透過 hdparm -I /dev/sdx 檢查是否有支援,如果 security 部份顯示如下圖為 "supported" 則表示有支援,若是 "not supported" 則表示不支援。



*** 以下為危險操作,操作不當將導致資料損毀 *** 
*** 請確保在腦袋清醒的狀態下執行下列操作! ***

首先我們先說明整個流程:
1. 備份整個 SSD 資料 (這裡沒有備份教學,在此假設大家已有現成的備份還原機制)
2. 對 SSD 進行 security erase
3. 還原資料至 SSD

2014年12月14日 星期日

實用 SSD 總整理(二)

我的 SSD 支援哪些標準,哪些功能?我該如何檢視 SSD 健康狀態?實際上這兩項問題都是硬碟出現時就已經存在的老問題,因此以下介紹的工具皆適用於 SSD 以及傳統硬碟。

透過 hdparm 我們可以檢視 SSD 諸多資訊,包含型號、韌體版本、支援協定、容量大小、支援模式、支援的 SATA 指令以及Security狀態等等,假設我們想查看 /dev/sdb 這顆 SSD 資訊即可透過 hdparm 進行檢視:
hdparm -I /dev/sdb


無論是使用硬碟或是 SSD 最擔心的就是發生資料損毀的狀況,畢竟資料無價啊!因此監控儲存裝置的健康狀態成為了重要的問題,這裡有一項好消息以及一項壞消息。好消息是這個問題硬碟大廠們老早就制定 S.M.A.R.T 指令來監控與回報硬碟的健康狀態,因此同樣也有既有的工具可以讀取 SMART 資訊,然而壞消息是 SSD 與硬碟設計上的差異導致 SMART 欄位定義不盡相同,一般 SMART 工具儘管能讀出 SMART 值卻不一定能正確解析內容。這部份原則上只能仰賴各家 SSD 廠商提供監控工具或是提供 datasheet 描述各欄位資訊,一般的 SMART 工具不見得能正確解析每顆 SSD 的SMART 資訊。

以下示範 gnome-disk-utility 取得 SMART 資訊:


實用 SSD 總整理(一)

隨著 SSD 日漸普及許多應用上逐漸替換掉原先硬碟,然而 SSD 諸多特性上與硬存在差異,此外不同的 SSD 控制晶片之間亦存在差異性。因此在系統設定以及管理上當然會與硬碟有所不同,以下為筆者整理 Linux 系統下使用 SSD 的經驗加上從各方蒐集的資料,將常用的 SSD 設定與遇到的問題做整理。

相信許多人都有對於 SSD 都有以下問題:
1. 什麼是 Trim,如何設定 Trim?
2. 我的 SSD 支援哪些功能?
3. 該如何檢視 SSD 的健康狀態?
4. 我的 SSD 速度不如以往,該怎辦?
5. 什麼是 4K 對齊,如何確認 4K 對齊呢?

首先我們先比較 SSD 與硬碟特性上的差異:

SSDHDD
效能
功耗
耐振動特性耐振動不耐振動
單位容量成本
資料儲存方式NAND Flash磁盤/讀寫頭
抹寫次數限制

從以上比較表中可以理解 SSD 是個快、省電、不怕振動的資料儲存方案,這些特性剛好符合行動應用的需求也因此 SSD 在行動裝置上有迅速的成長。然而 SSD 同樣存在一些缺陷,例如抹除寫入次數受限於 NAND Flash 顆粒(怕寫),因此我們可以透過微調系統設使 SSD 能發揮長處與避免缺點,讓我們開始吧!

修改 mount 設定開啟 Trim 以及 noatime。Trim 指令是針對 SSD 新增的指令,以往磁盤式的儲存設備對資料的操作僅有寫入與讀取,然而 NAND Flash 除了寫入、讀取之外還需要抹除的操作,假設需對一個已經存放舊資料的 Flash 區塊寫入新資料,並不能直接將資料寫入該區塊,而是需先將該區塊抹除才能在寫入資料:以往作業系統刪除檔案時,只會覆寫檔案的連結/配置資訊抹除檔案的完整資訊(刪除才會快),因次新增 Trim 指令使系統可在空閒時透過 Trim 指令告知 SSD 哪些資料不須再使用,因此 SSD 可將對應的 Flash 區塊進行抹除,一般而言 Trim 對於 SSD 長時間使用下的效能表現以及壽命有正面幫助,mount 對應的參數設定為 discard。由於 SSD 對於寫入次數有所限制,一般 Linux 系統掛載設定預設開啟 access time,當系統開啟檔案時就會更新(寫入)該檔案的 access time 資訊,如果應用上不需要紀錄 access time 即可關閉 atime 設定以減少寫入的資料,說了那多該如何修改 mount 參數套用以上設定呢?

編輯 /etc/fstab:
# 原始設定:
# <file system>    <mount point> <type>   <options>                    <dump>    <pass>
UUID=XXXX       /                        ext4       errors=remount-ro       0              1

# 加入 Trim  與關閉 access time 設定:
# <file system>    <mount point> <type>   <options>                                             <dump>    <pass>
UUID=XXXX       /                        ext4       errors=remount-ro,noatime,discard      0              1


修改完 /etc/fstab 之後重新開機即可生效。

此外還可以透過 fstrim 指令對特定檔案系統執行 Trim 指令,例如我們可以對根目錄未使用位址進行 Trim 操作:
fstrim -v /

2013年10月12日 星期六

IOZone 效能測試

由於電腦 DRAM 容量越來越大動輒 4GB、8GB,我們可以好好利用高容量的記憶體來加速需要大量讀寫操作的工作。

透過 mount 指令我們可以配置特定大小的記憶體為暫時行的檔案系統,然後掛載到某一目錄底下,接著就可以將我們要處理的程式或資料搬到該目錄裡,即可享受到 RAM Disk 的極佳效能體驗。以下示範掛載 1GB RAM Disk 至 ~/RAMDISK 目錄:
sudo mount -t tmpfs -o size=1GB none ~/RAMDISK/
接著就請出 IOZone 來檢測 ram disk 的效能究竟有多強大,在 i5-3317U CPU 搭配 8GB 1600 DDR3 記憶體進行測試,當然測試前必須先安裝 iozone,另外為了方便顯示結果一併安裝 gnuplot 以及 gnuplot-x11 。
sudo apt-get install iozone3 gnuplot gnuplot-x11
安裝好 iozone 之後立馬進行測試,iozone 測試相當容易只要下指令 iozone -az 即可跑出測試結果,當然我們可以把結果給紀錄到檔案中。
# 切換到將要進行測試的目錄 
cd ~/RAMDISK 
# 執行 iozone 並將結果存到 IOZone.log 檔案中g3m/4
iozone -a | tee IOZone.log
接著可以在 /usr/share/doc/iozone3/examples 目錄裡找到一些顯示結果的工具,將需要的檔案 copy 出來:
cp /usr/share/doc/iozone3/examples/Generate_Graphs  ./
cp /usr/share/doc/iozone3/examples/gengnuplot.sh ./
cp /usr/share/doc/iozone3/examples/gnu3d.dem.gz  ./
# 解壓縮 gnu3d.dem.gz 
gzip -d gzip -d gnu3d.dem.gz
執行 Generate_Graphs 將結果以圖形呈現:
chmod +x Generate_Graphs
./Generate_Graphs IOZone.log
圖形是以 gnuplot 繪製可以透過滑鼠拖拉轉換不同的視角觀看,可以從結果看出無論讀寫都有達到 GB 等級的表現,檔案寫入達到 2GB/s 以上檔案讀取更超出 4GB/s 以上的結果,算是相當優異,最後提醒一下結果跑完記得存回硬碟裡否則 ramdisk 的資料可是一關機就消失囉。















2013年1月9日 星期三

wireshark 擷取 USB 訊號

最近發現 wireshark 新增 USB 擷取的功能,只要是 Linux kernel 2.6.21 以上的版本皆可透過 usbmon 模組擷取 USB 裝置上的資料流,搭配 wireshark 本身強大的 filter 功能對於 USB 應用的開發與除錯帶來相當大的便利性。

使用 wireshark 擷取 USB 訊號實需先載入 usbmon 模組,於 terminal 執行指令:
$ sudo modprobe usbmon

根據官方 wiki 說法,若系統沒有掛載 debugfs 需執行以下指令(小弟於 ubuntu 12.10 測試結果是不需要的)。
$ sudo mount -t debugfs / /sys/kernel/debug
執行 wireshark 之前先確認 USB 裝置已接上電腦,可以透過 lsusb 確認想擷取的 usb ,lsusb 會顯示出 usb 裝置目前屬於哪個 USB Bus 與 Device 代號以及USB ID裝置,例如我們想觀察 Alcor Micro Corp. Flash Driver 這一個 USB 隨身碟裝置, lsusb 顯示該裝置目前位於 USB Bus 002 上代號為 Device 007 其 ID 為 058f:6387。

接著開啟 wireshark ,由於 usbmon 的加持每個 USB bus 皆顯示為一個獨立的 USB 裝置,假設想要擷取 Bus 2 的裝置即可選擇 Bus 2。

接著點選 Expression 設定 filter expression。

點選 Expression 按鈕會跳出 Filter Express 視窗,可以在 Field Name 欄位中尋找 USB 相關的項目並設定,例如想監測 USB ID 為 058f:6387 的裝置,先選擇 "usb.idVendor" 欄位接著選擇判斷條件 "==" 以及條件值 "0x058f",設定完之後按下確定。

回到 wireshark 主視窗中剛才設定的 filter 條件自動填入 filter 輸入欄位中,若條件格式語法正確其底色為綠色,反之語法錯誤則為紅色。


當然如果要設定較複雜的條件也沒問題,可將多個判斷是以 && 或是 || 進行組合。設定完 filter 條件後記得按下 Apply。

接著點選 Start 開始對 USB 裝置進行監測,即可體驗 wireshark 強大的 USB 封包擷取功能囉!

使用完之後可卸載 usbmon 模組。
$ sudo modprobe -r usbmon


參考資料 - http://wiki.wireshark.org/CaptureSetup/USB

2013年1月6日 星期日

Android裝置上執行Linux桌面環境

Android 系統擁有豐富的 app 提供行動應用便利的服務,而 Linux desktop environment 則擁有眾多桌面應用程式,無論是 Android 或是 Linux desktop environment 這兩者都是基於 Linux 核心發展出來的操作環境, 因此在同一硬體裝置上同時執行 Android 以及 Linux desktop environment 技術上是可行的方案,例如 Ubuntu 積極推出的 Ubuntu for Android 展示了 Android 與 Ubuntu 桌面環境的整合應用。

然而 Linux 的發行版本眾多每個使用者偏好不盡相同,假若要將自己喜愛的 Linux 環境也執行在 Android 裝置上該如何進行呢?以下提供一項解決方案(以 ARM -Based Android 裝置為例):
  1. 下載 ARM Linux 桌面發行版本的映像檔。
  2. 於 Android 上掛載 Linux 映像檔。 
  3. chroot 至 Linux 環境。
  4. 於 Linux 環境裝執行 vnc server。
  5. 使用 Android 的 vnc client 連線至 vnc server。
如此一來即可在單一裝置上同時執行 Android 與 Linux desktop environment。


2010年10月13日 星期三

安裝/執行 Linux 系統

本篇文章適合 - 初學者

當我們選擇了某個 Linux 發行版本後,接著當然就是讓 Linux 系統在自己的電腦上執行,目前常見的方法如下:
  1. 使用 Linux Live CD ,從光碟開機執行 Linux 系統。
  2. 在原先的系統上安裝虛擬機器,於虛擬機器上安裝與執行 Linux 系統。
  3. 安裝 Linux 系統於硬碟,從硬碟開機執行 Linux 系統。
實際上除了以上三種方法外,也有以 USB、NFS 等開機方式,然而需要比較多的步驟,在此不做詳細介紹。

若您採用第一種方法首先需取得 Linux Live CD 發行版光碟,某些 Linux 發行版本提供光碟寄送服務,可以嘗試寫 mail 給套件維護的社群或公司取得免費光碟(有些會酌收費用),或是下載光碟映像檔並自行燒錄光碟片,光碟映像檔通常是副檔名為 iso 的檔案,一般而言可以在該發行版下載網頁找到它,例如:Ubuntu 下載網頁、Open Suse 下載網頁...等。取得光碟後只要將光碟片放入光碟機中,並重新開啟電腦(需確認是否以光碟開機),即可執行 Linux Live CD,以 Live CD 執行最大的好處是不用安裝即可執行,這代表著只要帶著光碟即可再有光碟機的電腦上執行自己習慣的 Linux 系統,另一個好處是這種方法完全不會更動硬碟原先的資料,然而缺點是 Live CD 關機之後所有的更動都會消失。這裡需要留意的是某些發行版本光碟只提供 Live CD/DVD 功能、某些只提供安裝功能、某些是兩者都有,例如 Ubuntu 光碟可作為 Live CD 也可作為安裝光碟,而 Open Suse 則提供安裝光碟以及 Live Gnome、Live KDE 等不同的光碟選項,下載時要留意光碟是屬於哪一種。

第二種方法需在原先電腦系統中安裝 VirtualBox 或是 VMWare 這類系統虛擬機器,虛擬機器為一支程式該程式取得電腦系統部份的 CPU 時間、記憶體與硬碟空間等系統資源,憑藉著這些資源虛擬機器能夠模擬特定硬體平台,使用者可以在虛擬的硬體平台上以光碟(或是光碟映像檔)安裝其他作業系統。使用虛擬機器是目前相當熱門的一種方案,因為使用者不需要離開原本熟悉的系統,只是在原先的系統中安裝了一隻普通的應用程式(虛擬機器),接著在上面安裝新的系統即可體驗新功能,虛擬機器的硬碟會對應為原先電腦系統的一個檔案,因此刪除或是複製虛擬機器也相對比實際安裝在電腦上容易許多,然而採用此方法的先決條件是電腦的記憶體跟硬碟要夠大,每多一個 Linux 圖形介面的虛擬機器通常會需要512MB~1G記憶體以及8G以上的硬碟空間。

將 Linux 系統安裝在硬碟上是最直接且長久的方案,當您腦袋清醒時或是對 Linux 稍微熟悉後可以選擇直接安裝在硬碟上。實際上只要找一台未安裝任何系統且配有光碟機的電腦,然後放入 Linux 安裝光碟然後很開心的一步一步完成安裝(這是最理想的情況!!!),或者是很帥氣地將原先電腦上存在的系統幹掉,然後執行上述動作很開心的一步一步完成安裝,實際上當年小弟我就是這麼做然後強迫自己學習的。當然目前大多數 Linux 安裝光碟都很聰明,且 Google 也有許多 "Linux 多重開機" 的相關教學內容,因此以 Linux 系統與其他系統共存並建立開機選單在開機時可以選擇以哪個系統開機的做法並不困難,但是小弟我相當不建議新手使用多重開機的做法,因為如果安裝過程不正確可能毀掉原先安裝在電腦中的系統,即使順利完成安裝完成大多數使用者仍然會在下次開機時從選單選擇自己原先使用的系統而不會選擇不熟悉的新系統,與其耗費硬碟空間安裝多重開機倒不如選擇虛擬機器的做法較實際。