linux 磁盤分區

硬盤和主板的鏈接的地方:叫接口,硬盤的接口類型:

iops:i/o per second:每秒的讀寫次數。linux

  • IDE(ata):並口(數據並行傳輸),理論最大傳輸 133MB/S;iops:100次
  • SCSI:並口,Ultrascsi320:320MB/s;Ultrascsi640:640MB/s;iops:150-200次
  • SATA:串口(不能並行傳輸),768MB/s;iops:100次
  • SAS:串口,768MB/s;iops:150-200次
  • USB:串口,480MB/s
  • 上述接口的固態硬盤:iops:400次
  • pci-e接口的固態硬盤:iops:10萬次

桌面用的固態硬盤的接口通常是SATA的。c++

並口:同一個線纜能夠接多塊設備shell

  • IDE:2個。主硬盤,從硬盤
  • SCSI:
    • 寬帶:16-1個
    • 窄帶:8-1個

串口:只能接一個。windows

硬盤種類:機械硬盤,固態硬盤

  • 機械硬盤:由不少盤片組成,盤片上有不少同心圓中心有一個同心軸(叫主軸),每一個盤片的正反面都有一個磁頭,就像留聲機,有一個手臂(arm),支撐全部磁頭。centos

    硬盤結構圖片請參考:硬盤的物理結構和工做原理微信

    • track:磁道ide

    • sector:扇區,512bytes學習

    • cylinder:柱面:圓柱體的外表面(除去上下2個圓面)ui

      分區劃分是以柱面爲單位的。this

    • 平均尋道時間:硬盤的同心軸旋轉的速度。越快IO越好。

      5400轉/分,7200轉/分,10000轉/分,15000轉/分

    • 最外層的磁道,同一段時間內轉過的長度最大,因此IO最快,因此把C盤劃分到外層,因此windows的操做系統都裝在C盤上。

Linux的哲學思想:一切皆文件

設備類型:

  • block(塊):隨機訪問,數據交換單位是block
  • character(字符):線性訪問,數據交換單位是character

設備文件:

  • 關聯到設備的驅動程序;設備的訪問入口。
  • 設備文件是做爲程序的參數,就至關於執行對應的設備驅動程序。
  • 設備文件的特色是沒有文件大小,只有設備號。

設備號:

  • major:主設備號:區分設備的類型(鼠標仍是鍵盤),用於標明所須要的驅動程序。

  • minor:次設備號:區分同種類型下的不一樣設備(有2個顯示器,區分是哪一個顯示器)。是特定設備的訪問入口。

建立設備文件命令:mknod:make block or character special files

  • 語法:mknod [OPTION]... NAME TYPE [MAJOR MINOR]
    • NAME:設備文件名字
    • TYPE:設備類型,是block仍是character
    • 不指定設備號,會自動分配。
  • 選項:-m:指定設備文件的權限。
# mknod testdev c 111 1
# ll testdev
crw-r--r--. 1 root root 111, 1 Dec 25 18:42 testdev
# mknod -m 664 testdev1 c 111 1
# ll testdev1
crw-rw-r--. 1 root root 111, 1 Dec 25 18:42 testdev1

設備文件的名字不是隨便的,是有標準的,由ICANN制定。

操縱系統給硬盤的設備文件的命名規則:

  • IDE接口的硬盤:/dev/hd
  • SCSI,SATA,USB,SAS接口的硬盤:/dev/sd
  • 因爲同一種類的接口的硬盤可能存在多個,因此後面加字母a-z。例如hda,hdb;sda,sdb等。
# ll /dev/sda*
brw-rw----. 1 root disk 8, 0 Dec 25 10:10 /dev/sda
brw-rw----. 1 root disk 8, 1 Dec 25 10:10 /dev/sda1
brw-rw----. 1 root disk 8, 2 Dec 25 10:10 /dev/sda2

設備的引用問題:

  • 好比主板上插了2個串口的SCSI硬盤,2個USB
  • 第一次操做系統啓動後,把SCSI的2個盤識別爲sda,sdb;把2個USB識別爲sdc,sdd。
  • 下次操做系統啓動後,有可能就倒過來了。因此很差識別。

因此有了下面的設備引用方式:

  • 設備文件的名字:操做系統啓動時,識別到了設備,而後給了個名字
  • 卷標(Filesystem label):
  • UUID:隨機的128bit的數字:在給分區格式化(安裝文件系統)的時候,生成的隨機數字。

硬盤分區概念

硬盤的空間很大,爲了更細緻的使用它,要給它劃分紅獨立的區域,叫分區。如何識別分區呢?使用/dev/sda#,/dev/hda#。

#:爲數字,多是1位的數字,也多是2位的數字。

注意:centos5根據硬盤接口的類型,把IDE的命名位hd,把SCSI等的命名位sd。可是centos6和7,不論是什麼接口的硬盤,一概用sd[a-z]來命名了。

硬盤分區類型:

  • MBR:Master boot record:主引導記錄(扇區)

    在0號track(磁道),0號sector(扇區)裏,有512bytes

    這512bytes分爲3部分:

    • 前446bytes:bootloader程序,引導操做系統啓動的程序。

    • 接下來的64bytes:分區表(fat),用16個字節標識一個硬盤的可以使用區域,因此一共只能有4個分區(硬盤的可以使用區域)。

      • 若是想要超過4個分區怎麼辦?

        讓某一個分區,不直接指定硬盤空間的具體可以使用區域,而是指向硬盤的一個小地方,這個地方又放了一張分區表(fat),這個分區表的大小能夠隨意指定,因此這個分區表裏就能夠放n多的分區的索引,再由此索引,指定具體的分區(硬盤的可以使用區域)。

        因此就能夠有了:

        • 3主分區,1個擴展分區。擴展分區裏再分n個邏輯分區。
        • 主分區和擴展分區的數字,是從1-4的;邏輯分區是從5開始,即便主分區+擴展分區還沒到4,邏輯分區也是從5開始。
    • 最後2個bytes:MBR區域是否有效的標識。若是是55AA(16進制),則說明有效。不然,說明無效。

  • GPT:未調查

分區管理命令:fdisk

  • 查看硬盤裏的分區狀況:fdisk -l [-u][device...]

    不指定設備文件的話,就顯示全部硬盤的分區狀況。

    指定設備文件的話,就顯示指定硬盤的分區狀況。

    # fdisk -l
    
    Disk /dev/sda: 64.4 GB, 64424509440 bytes, 125829120 sectors(扇區)
    Units = sectors of 1 * 512 = 512 bytes(每一個扇區是512bytes)
    Sector size (logical/physical): 512 bytes / 512 bytes(扇區的邏輯/物理size都是512bytes)
    I/O size (minimum/optimal): 512 bytes / 512 bytes(IO大小512bytes)
    Disk label type: dos(dos表明是MBR的分區類型)
    Disk identifier: 0x000bc639(磁盤的UUID,16位的數字)
    
       Device Boot      Start         End      Blocks   Id  System
    /dev/sda1   *        2048     2099199     1048576   83  Linux
    /dev/sda2         2099200   125829119    61864960   8e  Linux LVM
    
    # fdisk -l /dev/sda
    
    Disk /dev/sda: 64.4 GB, 64424509440 bytes, 125829120 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 label type: dos
    Disk identifier: 0x000bc639
    
       Device Boot      Start         End      Blocks   Id  System
    /dev/sda1   *        2048     2099199     1048576   83  Linux
    /dev/sda2         2099200   125829119    61864960   8e  Linux LVM
    • 【Start End】:centos6是從哪一個柱面開始到哪一個柱面結束;centos7是從哪一個扇區開始到哪一個扇區結束。
    • 【Boot】:下的*,表明linux系統裝在這個分區裏。
    • 【block】:表明這個分區裏有多少個block
    • 【Id】:16進制的數字,表明分區的種類
      • 83:通常linux分區
      • 5:擴展分區(Extended)
      • 82:交換分區(Linux swap)
    • 【system】:Id的說明。
  • 管理分區:fdisk device

    fdisk提供一個交互式接口來管理分區,進入交互式之後,在裏面可使用不少子命令。

    全部操做的結果都是暫時保存在內存中,尚未寫入到磁盤,直到使用了w命令後,纔會把操做反應到磁盤,也就是操做才生效。這個命令很是危險。

Command action
   a   toggle a bootable flag
   b   edit bsd disklabel
   c   toggle the dos compatibility flag
   d   delete a partition(刪除分區)
   g   create a new empty GPT partition table
   G   create an IRIX (SGI) partition table
   l   list known partition types(顯示磁盤種類,也就是上面用fdisk -l命令的指向結果裏的Id)
   m   print this menu(獲取幫助)
   n   add a new partition(添加新的分區)
   o   create a new empty DOS partition table
   p   print the partition table(顯示現有的分區信息) 
   q   quit without saving changes(不保存,直接退出)
   s   create a new empty Sun disklabel
   t   change a partition's system id(修改分區的Id,也就是修改文件系統的種類)
   u   change display/entry units
   v   verify the partition table
   w   write table to disk and exit(保存並退出)
   x   extra functionality (experts only)

在虛擬機裏添加一個硬盤,而後給這個硬盤分區。

下圖是在虛擬機上新添加的硬盤,大小是1GB。

添加硬盤前:

# ll /dev/sda*
brw-rw----. 1 root disk 8, 0 Dec 25 10:10 /dev/sda
brw-rw----. 1 root disk 8, 1 Dec 25 10:10 /dev/sda1
brw-rw----. 1 root disk 8, 2 Dec 25 10:10 /dev/sda2

添加硬盤後:發現多了一個/dev/sdb,因此新添加的硬盤被操做系統識別到了。

# ll /dev/sd*
brw-rw----. 1 root disk 8,  0 Dec 26 13:26 /dev/sda
brw-rw----. 1 root disk 8,  1 Dec 26 13:26 /dev/sda1
brw-rw----. 1 root disk 8,  2 Dec 26 13:26 /dev/sda2
brw-rw----. 1 root disk 8, 16 Dec 26 13:28 /dev/sdb

查看一下新硬盤的狀況:

發現硬盤大小是:1073MB,和添加的1GB大小符合;硬盤分區類型是MBR

# fdisk /dev/sdb
Welcome to fdisk (util-linux 2.23.2).

Command (m for help): p

Disk /dev/sdb: 1073 MB, 1073741824 bytes, 2097152 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 label type: dos
Disk identifier: 0x0e2a2184

   Device Boot      Start         End      Blocks   Id  System

建立一個主分區:

Command (m for help): n
Partition type:
   p   primary (0 primary, 0 extended, 4 free)
   e   extended
Select (default p): p(問你是建立主分區p,仍是擴展分區e)
Partition number (1-4, default 1): 1(由於上面選的是主分區,因此問你主分區的分區號)
First sector (2048-2097151, default 2048): 2048(正在建立的這個分區,從哪一個扇區開始建立)
Last sector, +sectors or +size{K,M,G} (2048-2097151, default 2097151): +200M(建立多大的分區)
Partition 1 of type Linux and of size 200 MiB is set(告訴你一個200M的分區建立成功了)

Command (m for help): p

Disk /dev/sdb: 1073 MB, 1073741824 bytes, 2097152 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 label type: dos
Disk identifier: 0x87b57c10

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1            2048      411647      204800   83  Linux
Command (m for help): w(保存!)
The partition table has been altered!

Calling ioctl() to re-read partition table.
Syncing disks.

上面建立了一個/dev/sdb1分區。

查看剛建立的分區是否被操做系統識別了:查看文件/proc/partitions,發現/dev/sdb1已經在裏面了,就說明了操做系統已經識別了剛建立的分區了。

# cat /proc/partitions
major minor  #blocks  name

   8        0   62914560 sda
   8        1    1048576 sda1
   8        2   61864960 sda2
   8       16    1048576 sdb
   8       17     204800 sdb1
  11        0    1048575 sr0
 253        0   38834176 dm-0
 253        1    4063232 dm-1
 253        2   18960384 dm-2

上面建立分區的操做是在centos7裏作的,因此操做系統才能立刻就識別到剛建立的分區/dev/sdb1,可是若是是centos5或者6,就不能立刻識別出剛建立出來的分區。須要用下面的命令,告訴操做系統我剛建立了一個分區,請識別它,謝謝。下面的命令通常執行第一次時,不會成功,再執行一次就行了。

  • centos5:partprobe [device]

  • centos6/7:partxkpartx

    partx -a [device]

    kpartx -af [device]

若是磁盤空間滿了,系統就沒法工做了

因此,在劃分數據區的時候,最好預留一塊區域,當滿了的時候,管理員能夠啓動這塊預留區域,而後操做系統就能工做了。

c/c++ 學習互助QQ羣:877684253

本人微信:xiaoshitou5854

相關文章
相關標籤/搜索