日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

玩转 Linux 之:磁盘分区、挂载知多少?

發布時間:2023/12/6 linux 48 豆豆
生活随笔 收集整理的這篇文章主要介紹了 玩转 Linux 之:磁盘分区、挂载知多少? 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

轉載于:http://my.oschina.net/leejun2005/blog/290073

?

在做日志機擴容的時候,發現運維同學將一塊硬盤的掛載點沒有同以前的日志機保持一致,考慮到這會給日后的維護帶來麻煩,于是嘗試著手修改,在修改的同時,review 了下之前日志機的掛載配置,發現居然存在隨時掉坑的可能。。。至于什么坑,我會在文末說明。

so,感覺這事兒雖然簡單,也許一條命令就搞定的事情,但是,很多童鞋可能不明就里,純復制粘貼網上的命令,這很容易給人挖坑埋雷,今天就來聊聊 linux 下磁盤分區、掛載的問題,篇幅所限,不會聊的太底層,純當科普吧~

1、Linux 分區簡介

1.1 主分區 vs 擴展分區

硬盤分區表中最多能存儲四個分區,但我們實際使用時一般只分為兩個分區,一個是主分區(Primary Partion)一個是擴展分區(extended partition),主分區可以馬上被使用但不能再分區,擴展分區必須再進行分區后才能使用,也就是說它必須還要進行二次分區。那么由擴展分區再分下去的是什么呢?它就是邏輯分區(Logical Partion),邏輯分區沒有數量上限制。

1.2 驅動器標示的含義

對習慣于使用Dos或Windows的同學來說,有幾個分區就有幾個驅動器,并且每個分區都會獲得一個字母標識符,然后就可以選用這個字母來指定在這個分區上的文件和目錄,它們的文件結構都是獨立的,非常好理解。然而對Red Hat Linux新手來說,可就有點惱人了。因為對Linux用戶來說無論有幾個分區,都得分給目錄使用,它歸根結底就只有一個根目錄,一個獨立且唯一的文件結構。Red Hat Linux中每個分區都是用來組成整個文件系統的一部分,因為它采用了一種叫“掛載點”的處理方法,它的整個文件系統中包含了一整套的文件和目錄,且將一個分區和一個目錄聯系起來。這時要載入的一個分區就在linux的存儲空間的某個目錄下獲得。
下面我們先來看看Red Hat Linux的驅動器是如何標識的。 對于IDE硬盤,驅動器標識符為“hdx1”,其中“hd”表明分區所在設備的類型,這里是指IDE硬盤了。“x”為盤號(a為基本盤,b為基本從屬盤,c為輔助主盤,d為輔助從屬盤),“1”代表分區,前四個分區用數字1到4表示,它們是主分區或擴展分區,從5開始就是邏輯分區。例,hda3表示為第一個IDE硬盤上的第三個主分區或擴展分區,hdb2表示為第二個IDE硬盤上的第二個主分區或擴展分區。對于SCSI硬盤則標識為“sdx1”,SCSI硬盤是用“sd”來表示分區所在設備的類型的,其余則和IDE硬盤的表示方法一樣,不再贅述。
我們從上面可以看到,Red Hat Linux的分區是不同于其它操作系統分區的,它的分區格式常用的有Ext3和Swap兩種,Ext3用于存放系統文件,Swap則作為Red Hat Linux的交換分區(相當于windows中的虛擬內存文件)。那么現在我們就可以知道Red Hat Linux至少需要兩個專門的分區(Linux Native(本地)和Linux Swap(交換))。由于不能將Red Hat Linux安裝在Dos/Windows分區。一般來說我們將Red Hat Linux安裝一個或多個類型為“Linux Native”的硬盤分區,但是在Red Hat Linux的每一個分區都必須要指定一個“Mount Point”(掛載點),告訴Red Hat Linux在啟動時,這個目錄要給哪個分區使用。對“Swap”分區來說, 一般也定義一個,且它不必要定義載入點。
下面我們先對“Linux Native”和“Linux Swap”有個初步的了解。

  • SWAP分區是LINUX暫時存儲數據的交換分區,它主要是把主內存上暫時不用得數據存起來,在需要的時候再調進內存內,且作為SWAP使用的分區不用指定“Mout Point”(載入點),既然它作為交換分區,我們理所當然應給它指定大小,它至少要等于系統上實際內存的量,一般來說它的大小是內存的一至兩倍。另外你也可以創建和使用一個以上的交換分區,最多16個。

  • Linux Native是存放系統文件的地方,一般用EXT3的分區類型,對Red Hat Linux來說,有了較大的選擇余地,可以把系統文件分幾個區來裝(必須要說明掛載點),也可以就裝在同一個分區中(掛載點是“/”)。

1.3?為什么要自定義多個分區?

分多個區有以下幾個目的:

  • 在不損失數據的情況下重裝系統,比如獨立設置/home掛載點,重裝系統的時候直接標記回/home,數據不會有任何損失。

  • 針對不同掛載點的特性分配合適的文件系統以合理發揮性能,比如對/var使用reiserfs,對/home使用xfs,對/使用ext4。

  • 針對不同的掛載點開啟不同的掛載選項,如是否需要即時同步,是否開啟日志,是否啟用壓縮。

  • 大硬盤搜索范圍大,效率低

  • 磁盤配額只能對分區做設定

  • /home、/var、/usr/local 經常是單獨分區,因為經常會操作,容易產生碎片

2、掛載點目錄簡介

2.1 常見的掛載目錄結構

每塊硬盤都分為若干個分區,每個分區都有自己的文件系統。Windows為這些文件系統各自指定了一個字母。不過 GNU/Linux 使用唯一的樹形結構來管理文件,而每個文件系統都掛載于樹形結構的某個位置。
正如 Windows 需要有 C: 驅動器一樣,GNU/Linux 必須能夠將根文件系統掛載于文件樹的根(/)上。當根掛載完成之后,您就可以將其它文件系統掛載于樹形結構各種掛載點上。根結構下的任何目錄都可以作為掛載點,而您也可以將同一文件系統同時掛載于不同的掛載點上。
掛載點實際上就是linux中的磁盤文件系統的入口目錄

2.2 常見的掛載目錄說明

目錄 內容

/   根目錄,存放系統命令和用戶數據等(如果下面掛載點沒有單獨的分區,它們都將在根目錄的分區中) ?
/boot boot loader 的靜態鏈接文件,存放與Linux啟動相關的程序
/home 用戶目錄,存放普通用戶的數據
/tmp 臨時文件
/usr 是Red Hat Linux系統存放軟件的地方,如有可能應將最大空間分給它
/usr/local 自已安裝程序安裝在此
/var 不斷變化的數據,服務器的一些服務、日志放在下面。
/opt (Option可選的)附加的應用程序軟件包?

/bin 基本命令執行文件?
/dev 設備文件?
/etc 主機特定的系統配置?
/lib 基本共享庫以及內核模塊?
/media 用于移動介質的掛載點?
/mnt 用于臨時掛載文件系統或者別的硬件設備(如光驅、軟驅)?
/proc 系統信息的虛擬目錄(2.4 和 2.6 內核),這些信息是在內存中,由系統自己產生的。?
/root root 用戶的目錄?
/sbin 基本系統命令執行文件?
/sys 系統信息的虛擬目錄(2.6 內核)?
/srv 系統提供的用于 service 的數據
/usr/X1186 X-Windows目錄,存放一些X-Windows的配置文件
/usr/include 系統頭文件,存儲一些C語言的頭文件
/usr/src Linux內核源代碼,Linux系統所安裝的內核源代碼都保存在此
/usr/bin 對/bin目錄的一些補充
/usr/sbin 對/sbin目錄的一些補充
/lost+found 這個目錄在大多數情況下都是空的。但是如果你正在工作突然停電,或是沒有用正常方式關機,在你重新啟動機器的時候,有些文件就會找不到應該存放的地方,對于這些文件,系統將他們放在這個目錄下。
/boot: 必須總是物理地包含 /etc、/bin、/sbin、/lib 和 /dev,否則您將不能啟動系統。
/home:每個用戶將放置他的私有數據到這個目錄的子目錄下。
/tmp: 程序創建的臨時數據大都存到這個目錄。
/usr:包含所有的用戶程序(/usr/bin),庫文件(/usr/lib),文檔(/usr/share/doc),等等。
/var:所有的可變數據,如新聞組文章、電子郵件、網站、數據庫、軟件包系統的緩存等等,將被放入這個目錄。這個目錄的大小取決于您計算機的用途,但是對大多數人來說,將主要用于軟件包系統的管理工具。如果做服務器的話空間應盡量大。我的服務器的實際分法及實際使用的大小,還沒有實際投入使用。所以/var目錄沒有用那么多。一般WEB存放網頁的目錄是/var/www,postfix郵件的存放郵件的目錄是:/var/mail,var/log,是系統日志記錄分區, /var/spool:存放一些郵件、新聞、打印隊列等。
/opt:存放可選的安裝的軟件。

上面介紹了幾個掛載點,一般來說我們最少需要兩個分區(當然只要一個 / 分區也可以),需要一個SWAP分區,和一個“/”分區,但把一些常用、重要的掛載點分到其它分區,這樣便于管理。一般一個/分區,一個/usr分區,一個/home 分區,一個/var/log分區。當然這沒有什么規定,完全是依照需要來定的。我們可以使用Red Hat Linux提供的硬盤管理工具Disk Druid來完成分區和掛載點設置。

對照上圖和目錄簡介,可以把Linux系統的掛載點想象成一棵大樹
/ 為大樹的樹根
/ 衍生的其他掛載點為這顆大樹的樹枝
掛載點下的文件為樹葉

2.3 為什么 linux 的分區需要有掛載這個動作呢?

如果你看過我之前寫的 Linux 系列文章,那么應該記得我曾經標紅過一句話:linux 下一切皆文件!換言之就是linux操作系統將系統中的一切都作為文件來管理。在windows中我們常見的硬件設備(打印機、網卡、聲卡...)、磁盤分區等,在linux中統統都被視作文件,對設備、分區的訪問就是讀寫對應的文件。

3、實戰分區掛載

3.1 臨時掛載

舉個栗子,原來分區情況如下:

?
1 2 <code class="hljs erlang">[root@sg-sl-data]# df -h Filesystem ? ? ? ? ? ?Size ?Used Avail Use<span class="hljs-comment">% Mounted on</span>/dev/sda2?? ? ? ? ? ? ?<span class="hljs-number">20</span>G ?<span class="hljs-number">5.6</span>G ? <span class="hljs-number">13</span>G ?<span class="hljs-number">31</span><span class="hljs-comment">% /</span>/dev/sda6?? ? ? ? ? ??<span class="hljs-number">996</span>M ? <span class="hljs-number">35</span>M ?<span class="hljs-number">910</span>M ? <span class="hljs-number">4</span><span class="hljs-comment">%?/data</span>/dev/sda5?? ? ? ? ? ??<span class="hljs-number">426</span>G ?<span class="hljs-number">199</span>M ?<span class="hljs-number">404</span>G ? <span class="hljs-number">1</span><span class="hljs-comment">%?/disk1</span>/dev/sda1?? ? ? ? ? ??<span class="hljs-number">996</span>M ? <span class="hljs-number">46</span>M ?<span class="hljs-number">899</span>M ? <span class="hljs-number">5</span><span class="hljs-comment">%?/boot</span>tmpfs ? ? ? ? ? ? ? ? <span class="hljs-number">7.9</span>G ? ? <span class="hljs-number">0</span> ?<span class="hljs-number">7.9</span>G ? <span class="hljs-number">0</span><span class="hljs-comment">%?/dev/shm</span></code>

3.1.1 先卸載分區:

umount /disk1
umount /data

3.1.2 再重新掛起來:

mount /dev/sda5 /data
mount /dev/sda6 /disk1
注意:如前所述,不能2個分區同時掛載到/data

3.2 永久掛載:開機自動掛載

上面步驟中的方法只是臨時工干的活兒,開機后磁盤分區會不可見或者還是掛載之前的模樣,要想永久生效,還需要修改/etc/fstab,

LABEL=/data /data ext3 defaults 1 2
LABEL=/disk1 /disk1 ext3 defaults 1 2
修改為:
/dev/sda5 /data ext3 defaults 1 2
/dev/sda6 /disk1 ext3 defaults 1 2

說明:fstab 是文件系統分配表的配置文件,該文件有著嚴格的語法格式限制,類似 crontab 一樣,保存時也會對你的輸入格式進行校驗,請慎重使用,否則會有意想不到的問題發生。其一共有 6 個字段,空格分隔,具體每個字段的含義請參考這里,不再贅述:http://diamonder.blog.51cto.com/159220/282542

3.3 以下是添加硬盤&分區&掛載(高危操作,新手慎用!)

友情提示:分區操作是高危操作,尤其是新手同學請勿在生產環境隨意嘗試,否則后果自負!

更為詳細的分區教程請參見:

linux磁盤分區fdisk命令詳解?http://linux008.blog.51cto.com/2837805/548711

?
1 2 3 4 5 6 7 8 9 10 <code class="hljs groovy">fdisk?<span class="hljs-regexp">/dev/</span>sdb ?? 輸入m---n---p--<span class="hljs-number">-1</span>--回車---回車---p---w ?? mkfs.ext3 <span class="hljs-regexp">/dev/</span>sdb1 ?? mkdir?/disk2 ?? mount?<span class="hljs-regexp">/dev/</span>sdb1 <span class="hljs-regexp">/disk2/</span> ?在<span class="hljs-regexp">/etc/</span>fstab中添加:<span class="hljs-regexp">/dev/</span>sdb1 ? ? ? ? ? ?/disk2?? ? ? ? ? ? ? ? ?ext3 ? ?defaults ? ? ? ?<span class="hljs-number">1</span> <span class="hljs-number">2</span></code>

4、通過 fstab 設置開機掛載的坑

fstab 文件大家都很熟悉,Linux 在啟動的時候通過 fstab 中的信息掛載各個分區,一個典型的分區條目就像這樣:

/dev/sdb4 /mnt/usb vfat utf8,umask=0 0 0

/dev/sda4 為需要掛載的分區,sda4 是 Linux 檢測硬盤時按順序給分區的命名,一般來講,這個名稱并不會變化,但是如果你有多塊硬盤,硬盤在電腦中的順序變化的時候,相同的名稱可能代表著不同的硬盤分區,如果你是從 USB 設備啟動,與其他 USB 設備的插入順序也會導致分區識別的困難。

因此上面 3.2 小節中的配置直接寫 /dev/sda6 是有很大的隱患的,重啟后硬盤的順序可能發生變化,比如 你把 nginx 的用戶日志放在一個單獨的分區上,那么重啟后雖然設置了 fstab,但是由于順序變了相同的分區號可能代表不同的硬盤分區了,這樣就會導致某些分區上的數據服務不可用了。

(PS:文章開頭說過在 review 以前同學的掛載配置的時候發現了埋下的一個雷,正是上面的問題。)

這個時候 UUID 就派上用場了,UUID 全稱是 Universally Unique Identifier,也就是說,每個分區有一個唯一的 UUID 值,這樣就不會發生分區識別混亂的問題了。

在 fstab 中用 UUID 掛載分區,看起來向這樣:
UUID=1234-5678 /mnt/usb vfat utf8,umask=0 0 0
在 UUID= 后面填入分區相應的 UUID 值,就可以正確掛載分區了。
那么,我們如何知道一個分區的 UUID 呢?
有 3 種方法:

4.1 通過瀏覽 /dev/disk/by-uuid/ 下的設備文件信息

# ls -l /dev/disk/by-uuid/
------
lrwxrwxrwx 1 root root 10 10-13 09:14 0909-090B -> ../../sdb5
lrwxrwxrwx 1 root root 10 10-13 09:13 7c627a81-7a6b-4806-987b-b5a8a0a93645 -> ../../sda4
.....?

4.2 通過 vol_id 命令

# vol_id /dev/sdb5
ID_FS_USAGE=filesystem
ID_FS_TYPE=vfat
ID_FS_VERSION=FAT32
ID_FS_UUID=0909-090B
ID_FS_UUID_ENC=0909-090B
ID_FS_LABEL=SWAP
ID_FS_LABEL_ENC=SWAP
ID_FS_LABEL_SAFE=SWAP

4.3 通過 blkid 命令

# blkid /dev/sdb5
/dev/sdb5: LABEL="SWAP" UUID="0909-090B" TYPE="vfat"
通過這三種方法都可以獲得分區的 UUID,UUID 依據分區不同,長度和格式都不相同。

比如我最后把 /dev/sdb 掛載在了 /data1 目錄下(不放心的話重啟或者生成文件測試下,看掛載分區的空間被占用沒):

?
1 2 3 4 5 6 7 8 <code class="hljs tcl">文件系統 ? ? ? 類型 ? 容量 ?已用 ?可用 已用% 掛載點 /dev/sda3?? ? ?ext4 ? <span class="hljs-number">518</span>G ?<span class="hljs-number">2.7</span>G ?<span class="hljs-number">489</span>G ? ?<span class="hljs-number">1</span>% / tmpfs ? ? ? ? ?tmpfs ? <span class="hljs-number">16</span>G ? ? <span class="hljs-number">0</span> ? <span class="hljs-number">16</span>G ? ?<span class="hljs-number">0</span>%?/dev/shm /dev/sda1?? ? ?ext4 ?<span class="hljs-number">1008</span>M ? <span class="hljs-number">61</span>M ?<span class="hljs-number">896</span>M ? ?<span class="hljs-number">7</span>%?/boot /dev/sdb?? ? ??ext4 ? <span class="hljs-number">1.8</span>T ?<span class="hljs-number">1.1</span>G ?<span class="hljs-number">1.7</span>T ? ?<span class="hljs-number">1</span>%?/data1 grep?-v?<span class="hljs-string">'#'</span>?/etc/fstab?|column -t UUID=<span class="hljs-number">0</span>c685e8b-dbb3<span class="hljs-number">-4</span>a1c-a106<span class="hljs-number">-3</span>f1716ab34dd ?/ ? ? ? ? ext4 ? ?defaults,noatime ? ? ? ? ? ? ?<span class="hljs-number">1</span> ?<span class="hljs-number">1</span>UUID=<span class="hljs-number">2</span>d7f1bcf<span class="hljs-number">-06</span>d1<span class="hljs-number">-486e-87</span>df<span class="hljs-number">-404</span>ba670fcd9 ?/boot?? ??ext4 ? ?defaults,noatime ? ? ? ? ? ? ?<span class="hljs-number">1</span> ?<span class="hljs-number">2</span>UUID=<span class="hljs-number">248e7</span>a99-b459<span class="hljs-number">-4800</span>-bbd3<span class="hljs-number">-354047e49</span>a2f ?swap ? ? ?swap ? ?defaults,noatime ? ? ? ? ? ? ?<span class="hljs-number">0</span> ?<span class="hljs-number">0</span>tmpfs ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?/dev/shm??tmpfs ? defaults,nosuid,noexec,nodev ?<span class="hljs-number">0</span> ?<span class="hljs-number">0</span>devpts ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??/dev/pts??devpts ?gid=<span class="hljs-number">5</span>,mode=<span class="hljs-number">620</span> ? ? ? ? ? ? ? ?<span class="hljs-number">0</span> ?<span class="hljs-number">0</span>sysfs ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?/sys?? ? ?sysfs ? defaults ? ? ? ? ? ? ? ? ? ? ?<span class="hljs-number">0</span> ?<span class="hljs-number">0</span><span class="hljs-keyword">proc</span> ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? /<span class="hljs-keyword">proc</span><span class="hljs-title"> ? ? proc</span> <span class="hljs-title"> ? defaults</span> ? ? ? ? ? ? ? ? ? ? ?0 ?0<span class="hljs-title">UUID=870ebaf6-727f-48d3-b60c-f203339d94ac</span> ?/data1<span class="hljs-title"> ? ?ext4</span> <span class="hljs-title"> ? defaults,noatime</span> ? ? ? ? ? ? ?0 ?0</code>

5、FAQ:

  • 掛載點必須是一個目錄。

  • 一個分區掛載在一個已存在的目錄上,這個目錄可以不為空,但掛載后這個目錄下以前的內容將不可用。對于其他操作系統建立的文件系統的掛載也是這樣,卸載后,目錄以前的文件都還在,不會有任何丟失。

  • 目錄只占磁盤里的一個inode,存放文件屬性等信息。

  • 任何一個分區都必須掛載到某個目錄上。

  • 目錄是邏輯上的區分。分區是物理上的區分。

  • 磁盤Linux分區都必須掛載到目錄樹中的某個具體的目錄上才能進行讀寫操作。

  • 根目錄是所有Linux的文件和目錄所在的地方,需要掛載上一個磁盤分區。

  • 一個分區可以掛在多個目錄,但反過來一個目錄只能是一個分區的掛載點。

6、refer:

[1] Linux入門筆記之一:系統分區及掛載點?http://newthink.blog.51cto.com/872263/223795/

[2] 掛載點?http://wiki.linuxdeepin.com/index.php?title=%E6%8C%82%E8%BD%BD%E7%82%B9

[3] 什么叫“掛載”,“掛載點”?linux文件系統中的概念?http://bbs.csdn.net/topics/380197703

[4] Linux文件系統簡介?http://alicsd.iteye.com/blog/816268

[5] 第八章、Linux 磁盤與文件系統管理?http://vbird.dic.ksu.edu.tw/linux_basic/0230filesystem.php

[6] /etc/fstab 詳解?http://diamonder.blog.51cto.com/159220/282542?http://dikar.iteye.com/blog/361659

[7] 如何在CentOS下使用fdisk添加新硬盤?http://343308530.blog.51cto.com/7202597/1251558

[8] 多硬盤分區管理fdisk?http://blog.fens.me/linux-fdisk/

創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

總結

以上是生活随笔為你收集整理的玩转 Linux 之:磁盘分区、挂载知多少?的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。