linux 磁碟分區

来源:https://www.cnblogs.com/xiaoshiwang/archive/2019/12/27/12107127.html
-Advertisement-
Play Games

硬碟和主板的連接的地方:叫介面,硬碟的介面類型: iops:i/o per second:每秒的讀寫次數。 IDE(ata):並口(數據並行傳輸),理論最大傳輸 133MB/S;iops:100次 SCSI:並口,Ultrascsi320:320MB/s;Ultrascsi640:640MB/s;i ...


硬碟和主板的連接的地方:叫介面,硬碟的介面類型:

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

  • 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的。

並口:同一個線纜可以接多塊設備

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

串口:只能接一個。

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

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

    硬碟結構圖片請參考:硬碟的物理結構和工作原理

    • track:磁軌

    • sector:扇區,512bytes

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

      分區劃分是以柱面為單位的。

    • 平均尋道時間:硬碟的同心軸旋轉的速度。越快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


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • Maintains a list of objects affected by a business transaction and coordinates the writing out of changes and the resolution of concurrency problems. ...
  • 一、創建winform工程 拖拽控制項Chart 二、比如要繪製倆條曲線,設置Chart控制項的屬性Series 三、chart的屬性根據自己的業務需求設計,我這裡只設置了圖標類型 代碼: using System; using System.Collections.Generic; using Sys ...
  • 在asp.net core 3.0 中,如果直接在 中返回 類型,會拋出如下錯誤: The collection type 'Newtonsoft.Json.Linq.JObject' is not supported. System.NotSupportedException: The colle ...
  • 對目前市場上的web列印方法做了些研究心得 1、比較大眾的IE組件有Lodop; 這種組件方式,需要IE內核的瀏覽器,對於非IE內核的瀏覽器,如Google Chrome、Mozilla Firefox、Safari、Opera、Netscape就不行了,限制了客戶只能用IE,IE都差不多要淘汰了, ...
  • 最近項目上開始使用.net core,新的項目,熟悉的東西比較多,現在花點時間來梳理一下,重頭開始搭建一個.net core項目。哈哈,這個相對老手來說,估計會覺得小兒科,沒事,也就當一次分享總結罷了,希望對有幫助的小伙伴有點幫助就好。 ...
  • 前段時間寫了一篇關於C 非同步編程入門的文章,你可以點擊《 "C 非同步編程入門看這篇就夠了" 》查看。這篇文章我們來討論下關於C 非同步編程幾個不成文的建議,希望對你寫出高性能的非同步編程代碼有所幫助。註:本文的很多內容都是學習《Effective C 》的總結。 作者:依樂祝 原文地址:https:// ...
  • 譯者前言 今天突然好奇C、C++和C#這三門語言都有個C,那麼它們之間到底有什麼關聯呢。所以就去Google了,找到了這篇文章:Understanding the Differences Between C#, C++, and C - C# Station。看完感覺寫得挺好的,就打算翻譯出來。 需 ...
  • 前端開發,學習Linux,記錄安裝中的一些問題,比如在安裝最小版後,如何由命令行轉為圖形界面等。 筆記中截圖參考其他資料。 下載文件 VMware 12: 鏈接:https://pan.baidu.com/s/1AhtOf_erXFylyc0nIsJ14A 提取碼:3lq6 CentOS 7: 鏈接 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...