2011年12月26日 星期一

硬碟分割區的研究(二) --- 從指令fdisk觀察

假設我們有一顆磁碟「/dev/sdb」,這顆磁碟有255個磁頭(head),2610個磁柱(cylinder),以及平均一個磁軌有63個磁區 (63 sectors/track)。現在我們透過指令「fdisk」將這個磁碟分割成3個分割區:sdb1、sdb2、sdb3。結果列舉如下圖:

圖(一):以磁柱編號來顯示磁碟資訊
從上圖可知這3個分割區的範圍:
sdb1:從磁柱1~磁柱1       => 表示sdb1座落在磁柱1裡面。
sdb2:從磁柱2~磁柱2       => 表示sdb2座落在磁柱2裡面。
sdb3:從磁柱3~磁柱2610  => 表示sdb3座落在磁柱3~2610裡面。


圖(二):以磁區編號來顯示磁碟資訊
Q1:這3個分割區各自擁有多少個磁區(sector)?
PS:fdisk -l顯示的資訊,磁區編號從0開始,磁柱編號是從1開始。
從上圖的資訊可知:
1.每1個磁柱(cylinder)含有255*63=16065個磁區(sector)。
2.第1個磁柱含有16065個磁區,編號從Sector 0~16064。
3.第1個分割區「sdb1」擁有磁碟第1個磁柱(編號1)的部份磁區,Sector 63 ~ 16064。所以換言之第1個分割區並沒有擁有第1個磁柱的所有磁區。
4.第2個分割區「sdb2」擁有磁碟第2個磁柱全部的磁區,Sector 16065 ~ 32129。所以擁有的磁區總數=32129-16065+1=16065=1 個磁柱所含有的全部的磁區數。
5.第3個分割區「sdb3」擁有磁碟第2個磁柱~第2610磁柱全部的磁區,(2610-3+1)*16065=41897520=41929649-32130+1。


Q2:磁碟的第1個磁區(編號Sector 0)到第63個磁區(編號Sector 62),共63個Sectors不屬於第1個分割區(sdb1),那這些沒用在分割區的磁區是用來作什麼的?

PS:CHS表示法,磁柱從0起算,磁頭從0起算,磁區從1起算;所以MBR是(0,0,1)。
這63個磁區按位置是座落在磁碟最前頭的63個磁區,其中最開頭的磁區也就是磁碟的第1個磁區,是我們俗稱的MBR,也就是「主要開機磁區」。接在MBR後面的62個磁區是保留磁區,與MBR一起組合成一個磁軌(track),按CHS定址的表示法是(0,0,1)、(0,0,2)一直到(0,0,63)。也就是磁碟的第一個磁盤(對應第1個磁頭)上的第1個磁軌(對應第1個磁柱)上的所有磁區。
所以總結來說,每個磁碟的前63個磁區有特殊使用,不在分割區裡頭。也因此除了有座落在第1個磁柱的分割區不會用滿第1磁柱的所有磁區;其它磁柱的磁區都會全部給分割區使用。


Q3:圖(二)中,blocks欄位的紅色框框數值"8032+",這"+"是什麼意思??
在linux作業系統中,無論是哪一個檔案系統,預設都是以1 block=1024 Bytes=1 KB來統計磁碟容量,既然1個block等於1024 Bytes,也就相當於2個磁區(因為1個磁區固定為512 Bytes),所以我們將sdb2的總磁區數16065除以2會得到8032餘1,這代表這個分割區內含的總磁區數如果以1個block等於1024 Bytes來換算的話,我們會得到該磁區有8032個完整的blocks,和1個不完整的block,而這一個不完整的block便用『+號』表示。而有的人是說該欄位正確的數字應是「8032.5」個block,不過指令fdisk只能顯示整數,所以『+號』表示小數點之後還有值,也就是比8032還要多一點,但又不到8033。這樣的說法也是對的,因為實際意義是一樣的。




從指令「fdisk」了解磁碟的分割區之後,下一篇我們用另一個操作磁碟分割表(Partition Table)的指令「sfdisk」來再看一次該磁碟的分割區資訊,作一個對應和驗證,順便學習了解「sfdisk」,而且這一個指令可以備份和還原「Partition Table」,實用性分常高。

2011年11月3日 星期四

SSH遠端連線-用金鑰認證

     在本機架設ssh-server,開啟ssh遠端連線的服務,方便自己可以在遠端用ssh連線到本機來操控。通常在ssh連線到ssh-server時, server會問使用者要登入操作的「帳號和密碼」,這也就是常用的「帳密認證」方式,這樣的方式對於想要「自動登入到ssh-server作一些例行性操作」會造成一些困擾,在自動操作的過程中會停下來等待使用者輸入「帳密」。

     ssh-server 支援另一種認證方式-「金鑰」認證,使用者自行產生一對「公私鑰」,將私鑰內容複製到ssh-server上的認證檔裡,這樣我們便可以在有存放私鑰的主機上用ssh連線到遠端的ssh-server,而server會在連線時比對私鑰內容,符合正確便認證通過。

整個操作過程如下:











     首先我們在clien端要先安裝ssh的client端套件(openssh)。
     透過該透件提供的指令「ssh-keygen」來製造金鑰,預設是以rsa的方式產生金鑰,並指定金鑰存放的位置。上圖顯示,在本機使用者以「帳號:geego」產生rsa的金鑰,該金鑰存放在預設的位置(使用者帳號的家目錄底下)「/home/geego/.ssh/」。










從上圖我們可以看到在本機上,ssh-keygen指令已經幫我們產生一對公鑰(id_rsa.pub)和私鑰(id_rsa),並放在該使用者(geego)的家目錄底下「/home/geego/.ssh/」。

接下來,要將私鑰放到要登入的遠端Server上,在本機透過指令「ssh-copy-id」這個指令,如下圖:








     指令「ssh-copy-id」,會將使用者指定的「個人私鑰內容(id_rsa)」放到遠端的server上登入帳號(southwind)的認證檔(/home/southwind/.ssh/authorized_keys)。



接下來用ssh登入到server看看
      可以看到在本機帳號「geego」,用帳號「southwind」登入到遠端server。
      可以在遠端登入的帳號(southwind)的家目錄下看到認證檔「authorized_keys」,該檔紀錄了所私鑰內容,並詳註這一把私鑰是哪一個主機的哪一個帳號(geego)。


結論:
      
      ssh可以幫我們製造公私鑰,並用私鑰的比對來作連線的認證。透過ssh-copy-id指令將私鑰的內容放到遠端server的認證檔裡(authorized_keys)。ssh會比對自己server裡的認證檔和要求連線主機的私鑰這兩個內容,如果相符就可以允許連線。不相符便重回帳密認證的方式。


操作流程:


a.ssh-keygen,在本機產生金鑰(id_rsa, id_rsa.pub)。
b.ssh-copy-id,將本機的金鑰的私鑰(id_rsa)內容,複製到遠端server的認證檔(autorized_keys)裡




2011年10月31日 星期一

CentOS NTP Server 架設心得

這一陣子在研究NTP Server的架設,不過一直對NTP_Server的Stratum階層架構弄不清礎,配合指令ntpstate和ntpq -p,裡頭顯示有關stratum的資訊更是弄的亂七八糟。好不容易設計幾個實驗,終於有點弄懂了,所以作個筆記,也順便與有興趣的朋友分享。

說明如下:
在安裝了ntp的套件之後,我們到NTP_Server的設定檔「/etc/ntp.conf』下作些編輯











A.這三行是原來設定檔的內容,我們將它先註解掉,再開始指定我們架設的本機NTP_Server的設定。自己用本機架設NTP_Server,理論上是要自己指定要與網路上的哪一個遠端NTP_Server作網路校時,如果這台遠端的NTP_Server的Stratum是5的話,那與它連線的其本機NTP_Server的Stratum應為6。所以這台遠端的NTP_Server,也被稱之為本機NTP_Server的上一層NTP_Server。

B.為了清礎釐清Stratum,所以我們只指定一台遠端的NTP_Server,而且我們知道這台遠端的NTP_Server (ntp.amnic.net)的Stratum=1。這可以從這個網址知道NTP_Server參考

C.本機NTP_Server預設也會以假裝本機是個Stratum=10的遠端NTP_Server,這樣如果連不上遠端的NTP_Server的話,本機NTP_Server就會連線自己,以本機時間來作網路校時。為了不讓這兩行影響我們要作的實驗,所以我們將這兩行加「#」號註解掉。讓本機的NTP_Server只跟Stratum=1的遠端NTP_Server作網路校時。

D.加入這一行,方便我們從本機NTP_Server的log資料來觀察。

2011年10月29日 星期六

Linux SSH Server設定檔(sshd_config)的心得

學過Linux的玩家都知道Linux可以安裝SSH-Server的服務,而該服務的設定檔是在「/etc/ssh/sshd_config」,不過筆者一開始有點搞不清礎設定檔的設定邏輯。後來經過一連串的試驗,終於弄清礎,所以將心得放上來紀錄一下。(人老了,記憶力會不好^__^)


▼下圖是ssh-server設定檔的部份內容:
套件:openssh-server的設定檔「sshd_config」


1號框框:裡頭說明,該設定檔用「#(commented)」為開頭來描述預設值為何,而如果將開頭的註解符號「#」拿掉,使用者就可以自己指定設定值。

2號框框:按1號框框的說明,我們可以揣摩出2號框框的意義是「SSH-Server預設是port:22作連線的服務。所以如果今天使用者想要更改port的位置為2222。此時有兩種方式來作設定,如下圖:
sshd對外連線所用的連接埠,在設定檔sshd_config的設置方式的正確方式













又如果我們希望除了預設的port:22作連線服務之外,還想額外增加port:2222也可以作為連線服務,此時可以如下圖的方式來設定:

實務上在設置sshd對外通訊連接埠的常用方式










結論:
         SSH-Server本身有預設的設定內容,全都「描述」在設定檔「/etc/ssh/sshd_config」裡頭,以「#」號作開頭。在這個檔案裡頭,其實「#」號開頭的內容只是作說明而已,對SSH-Server的運作來說,有沒有「#」號開頭的內容其實沒差。讀者可以試著把該檔的內容全部清除成空白,重新啟用sshd;會發現SSH-Server還可以正常以「預設值」來運作。
         不過如果設定檔內有『無#號開頭』的設定值,則以此設定值運作。

         因此,為了同時能紀錄SSH-Server的預設值,而又能自己指定設定值,最好的方式就是『保留有#號開頭的設定內容,將自己指定的設定值置放於該行之下,並且開頭不可有「#」號,這樣SSH-Sever才會以自己指定的設定值運作。如下:

#Port 22
Port2222