Linux 系統(tǒng)中所有的硬件設備都是用文件的形式來表示和使用的,也就是說,如果你想使用某個硬件設備首先你就需要將其掛載到某個目錄下面,通過對這個目錄的操作來操作設備;如果不掛載,通過Linux系統(tǒng)中的圖形界面系統(tǒng)可以查看找到硬件設備,但命令行方式無法找到。
創(chuàng)新互聯(lián)服務電話:18980820575,為您提供成都網站建設網頁設計及定制高端網站建設服務,創(chuàng)新互聯(lián)網頁制作領域十載,包括成都自上料攪拌車等多個領域擁有多年的網站設計經驗,選擇創(chuàng)新互聯(lián),為網站保駕護航。
并不是根目錄下任何一個目錄都可以作為掛載點,由于掛載操作會使得原有目錄中文件被隱藏,因此根目錄以及系統(tǒng)原有目錄都不要作為掛載點,會造成系統(tǒng)異常甚至崩潰,掛載點最好是新建的空目錄
磁盤也是一樣的,磁盤的文件是存放在 /dev 目錄下,磁盤設備文件的命名規(guī)則為:
常見的主設備號有:sd,hd;它們是代表的不同的磁盤類型: sd 代表的 IDE 硬盤, hd 代表的是 SCSI 硬盤
次設備號就是同一類型設備的次序,用 [a-z] 來表示, /dev/sda 表示第一塊 IDE 類型的磁盤, /dev/sdb 表示第二塊 IDE 類型的磁盤
磁盤分區(qū)編號,每一塊磁盤都會被劃分為多個磁盤分區(qū)(這個下面會介紹),每一個分區(qū)都會有一個編號,比如: /dev/sda1 表示這是該磁盤的第一個分區(qū),以此類推
在 Linux 中,每一個硬盤設備都只能劃分四個主分區(qū);若是劃分了一個擴展分區(qū)那最多可以劃分三個主分區(qū);可以表示為:
主分區(qū)加擴展分區(qū)最多只有四個;可以全部劃分為主分區(qū),也可以之劃分一個主分區(qū);但是擴展分區(qū)最多只有一個;擴展分區(qū)是不能直接使用的,還有進一步劃分為邏輯分區(qū)才能使用;一個擴展分區(qū)可以劃分為多個邏輯分區(qū);
主分區(qū)的分區(qū)編號是:1,2,3,4;從擴展分區(qū)劃分出來的邏輯分區(qū)的編號是從 5 開始,以次累加
這跟系統(tǒng)啟動有關系;當你啟動電腦時,首先就會加載 BIOS 信息,這里面包含了 Cpu 和其他硬件設備的信息;找到它計算機就知道怎么啟動了
接下來,它會去找 MBR(Master Boot Record) ,也就是主引導記錄;為了方便 BIOS 的查找,所以就會把它放在磁盤上第0磁道上的第一個扇區(qū)中,磁盤中每個扇區(qū)有 512 字節(jié);雖然只有這么大一點,但是要存三部分信息:
磁盤分區(qū)表總共只有 64 字節(jié),而每個分區(qū)信息占 16 個字節(jié),所以就只能有四個主分區(qū)了
這應該是歷史遺留的問題了,一開始只有四個分區(qū),后來發(fā)現(xiàn)四個分區(qū)不夠用,就引入了擴展分區(qū),而擴展分區(qū)是不能直接使用的,它必須再劃分為邏輯分區(qū),邏輯分區(qū)的數(shù)量可以是任意多個。
對用戶而言,主分區(qū)和邏輯分區(qū)使用起來沒有任何的區(qū)別,同時還能夠達到無限分區(qū)的目的
我想很多人都思考過這個問題,我再了解了之后才發(fā)現(xiàn)磁盤分區(qū)還是有很多的好處的。具體例子:
現(xiàn)在給你一個倉庫,你打算存放快遞,一開始你一股腦的把所有的快遞直接放進去,等到別人來取快遞的時候你就發(fā)愁了,幾十甚至上百個快遞得找到啥時候啊
所以你打算開始分區(qū)管理,因為你代理了中通,圓通,百世等好幾個快遞,所以你打算按照不同的快遞分為三個貨架;
過一段時間發(fā)現(xiàn)同一種快遞如果量大的時候還是會混亂;因此你又想了個辦法就是按照日期給快遞編號,然后按照不同的日期將貨架分為多層,每一層存放某一天的快遞,同時你又找了個表記錄了每個分區(qū)快遞存放的位置,這大大增加了存取的效率
磁盤分區(qū)的目的,
Linux 常見目錄:
一般要是新手,可以只建立兩個分區(qū):
這種分區(qū)方式比較簡單,如果只是測試可以用這種;要是想當成一個常用的系統(tǒng),就需要更細一點劃分了,常用的分區(qū)方案如下(假如有磁盤有100G):
echo "scsi add-single-device x y z u" /proc/scsi/scsi
其中:
x是硬盤所在SCSI控制器號(一般機器就一個SCSI控制器,所以就是0);
y是硬盤所在SCSI通道的編號(一般單通道的就是0,多通道的要看是哪個通道了);
z是硬盤的SCSI ID號(可以通過具體插入的硬盤插槽來判斷);
u是硬盤的lun號(默認情況都是0)
可能是你沒有讀取那個文件的權限,所以會導致open失敗.
通常對于這種系統(tǒng)文件都要求有root權限,看看你是否有權限吧.
LINUX查詢工作站多硬盤的硬盤序列號方法:
1、確認安裝yaourt hdparm
2、運行下面命令查看共有多少硬盤
[root@myhost detect]# fdisk -l
Disk /dev/sda: 320.1 GB, 320072933376 bytes
255 heads, 63 sectors/track, 38913 cylinders, total 625142448 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000
Device Boot Start End Blocks Id System
/dev/sda1 * 63 385559 192748+ 83 Linux
/dev/sda2 385560 4385744 2000092+ 82 Linux swap / Solaris
/dev/sda3 4385745 14378174 4996215 83 Linux
/dev/sda4 14378175 625137344 305379585 5 Extended
/dev/sda5 14378238 34379099 10000431 83 Linux
/dev/sda6 34379163 44371529 4996183+ 83 Linux
/dev/sda7 44371593 75617954 15623181 83 Linux
/dev/sda8 75618018 106864379 15623181 83 Linux
/dev/sda9 106864443 126865304 10000431 83 Linux
/dev/sda10 126865368 625137344 249135988+ 83 Linux
由上可見,只有一個硬盤sda,其中,sda1到sda10是說該硬盤共有十個分區(qū)。
多個硬盤的話會看到sdb、sdc等;
3、查看sda硬盤的序列號,
[root@myhost detect]# hdparm -i /dev/sda
/dev/sda:
Model=ST3320418AS, FwRev=CC66, SerialNo=6VMDEMJM
Config={ HardSect NotMFM HdSw15uSec Fixed DTR10Mbs RotSpdTol.5% }
RawCHS=16383/16/63, TrkSize=0, SectSize=0, ECCbytes=4
BuffType=unknown, BuffSize=16384kB, MaxMultSect=16, MultSect=16
CurCHS=16383/16/63, CurSects=16514064, LBA=yes, LBAsects=625142448
IORDY=on/off, tPIO={min:120,w/IORDY:120}, tDMA={min:120,rec:120}
PIO modes: pio0 pio1 pio2 pio3 pio4
DMA modes: mdma0 mdma1 mdma2
UDMA modes: udma0 udma1 udma2 udma3 udma4 *udma5
AdvancedPM=no WriteCache=enabled
Drive conforms to: unknown: ATA/ATAPI-4,5,6,7
由上可見,sda硬盤的序列號為6VMDEMJM。
同理查看其它硬盤序列號。
1、在Linux系統(tǒng)中通過C語言獲取硬盤序列號,可以借助于ioctl()函數(shù),該函數(shù)原型如下:
int?ioctl(int?fd,?unsigned?long?request,?...);
ioctl的第一個參數(shù)是文件標識符,用open()函數(shù)打開設備時獲取。
ioctl第二個參數(shù)為用于獲得指定文件描述符的標志號,獲取硬盤序列號,一般指明為HDIO_GET_IDENTITY。
ioctl的第三個參數(shù)為一些輔助參數(shù),要獲取硬盤序列號,需要借助于struct?hd_driveid結構體來保存硬盤信息?,該結構體在Linux/hdreg.h中,struct?hd_driveid的聲明如下
struct?hd_driveid?{
unsigned?short????config;????????/?lots?of?obsolete?bit?flags?*/
unsigned?short????cyls;????????/*?Obsolete,?"physical"?cyls?*/
unsigned?short????reserved2;????/*?reserved?(word?2)?*/
unsigned?short????heads;????????/*?Obsolete,?"physical"?heads?*/
unsigned?short????track_bytes;????/*?unformatted?bytes?per?track?*/
unsigned?short????sector_bytes;????/*?unformatted?bytes?per?sector?*/
unsigned?short????sectors;????/*?Obsolete,?"physical"?sectors?per?track?*/
unsigned?short????vendor0;????/*?vendor?unique?*/
unsigned?short????vendor1;????/*?vendor?unique?*/
unsigned?short????vendor2;????/*?Retired?vendor?unique?*/
unsigned?char????serial_no[20];????/*?0?=?not_specified?*/
unsigned?short????buf_type;????/*?Retired?*/
unsigned?short????buf_size;????/*?Retired,?512?byte?increments
*?0?=?not_specified
*/
……
};
2、源代碼如下
#include?stdio.h
//ioctl()的聲明頭文件
#include?sys/ioctl.h
//硬盤參數(shù)頭文件,?hd_driveid結構聲明頭文件
#include?linux/hdreg.h
//文件控制頭文件
#include?sys/fcntl.h
int?main()
{
//用于保存系統(tǒng)返回的硬盤數(shù)據(jù)信息
struct?hd_driveid?id;
//這里以第一塊硬盤為例,用戶可自行修改
//用open函數(shù)打開獲取文件標識符,類似于windows下的句柄
int?fd?=?open("/dev/sda",?O_RDONLY|O_NONBLOCK);
//失敗返回?
if?(fd??0)?{
perror("/dev/sda");
return?1;?}
//調用ioctl()
if(!ioctl(fd,?HDIO_GET_IDENTITY,?id))
{
printf("Serial?Number=%s\n",id.serial_no);
}
return?0;
}
編譯完成后,執(zhí)行效果如下:
df-TH硬盤信息free內存信息cat/proc/cpu****后面的用tab補齊我記得是cpuinfo但不確定cat/proc/meminfo也可以查看內存