
剛裝好的Ubuntu服務器插上一塊新硬盤以為開機就能在系統(tǒng)里看到結果進終端敲命令一看什么也沒有。第一次上手“ubuntu系統(tǒng) 掛載 硬盤”這個操作的人十有八九會被這一下卡住不是找不到盤就是掛載完重啟之后“丟盤”或者分區(qū)表選錯導致整塊盤都讀不出來。這篇文章我就圍繞這個話題把從識別磁盤、分區(qū)、格式化到臨時掛載、永久開機掛載的完整流程完整講透順便把那些文檔里不會寫、不看一眼根本想不明白的坑也翻出來聊一聊。適合剛接觸Linux運維的新手也適合那些系統(tǒng)已經(jīng)裝好、平時只碰圖形界面、對磁盤管理還有點發(fā)怵的朋友。我個人做Linux運維這幾年經(jīng)手“加掛數(shù)據(jù)盤”這個操作不下幾十次包含普通臺式機、服務器陣列盤、NVMe固態(tài)盤、USB外接移動硬盤各種情況。不同的硬件、不同的場景步驟上有些微差異但核心思路是一致的。下面按照我實際操作的順序把每一步為什么這么做、命令該怎么敲、參數(shù)怎么取舍都拆開講。1. 掛載前的核心準備先認清硬件與磁盤狀態(tài)1.1 動手之前先確認系統(tǒng)認出了幾塊盤掛載硬盤最基礎也最容易被忽略的一步是先確認系統(tǒng)到底有沒有識別出這塊新加的盤。很多新手上來就直接敲mount /dev/sdb1 /data結果整個終端都在報錯最后發(fā)現(xiàn)系統(tǒng)里根本沒有/dev/sdb1這個設備節(jié)點。Linux下查看磁盤信息的命令有好幾個我最常用的是lsblk因為它的輸出一眼就能看懂。它是“l(fā)ist block devices”的縮寫會以樹狀結構列出系統(tǒng)中所有的塊設備lsblk新插上一塊盤之后執(zhí)行這條命令你會在輸出里看到類似這樣的內(nèi)容NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda 8:0 0 238.5G 0 disk ├─sda1 8:1 0 512M 0 part /boot/efi ├─sda2 8:2 0 218.2G 0 part / └─sda3 8:3 0 19.8G 0 part [SWAP] sdb 8:16 0 931.5G 0 disk如果新增了一塊盤通常會以sdb、sdc這樣的名字出現(xiàn)。TYPE 列值為disk表示物理磁盤值為part表示這是磁盤上的分區(qū)。最右側 MOUNTPOINT 列如果為空說明這塊盤目前還沒掛載需要手動處理如果有值說明系統(tǒng)已經(jīng)在使用這個分區(qū)。除了lsblk還可以用fdisk -l查看更詳細的磁盤信息包括磁盤大小、扇區(qū)數(shù)、分區(qū)表類型。不過fdisk -l的輸出稍微有點長一般用來確認分區(qū)表類型和扇區(qū)信息。還有l(wèi)shw -class disk這類命令能顯示更底層的硬件信息但我平時用得少能通過lsblk解決問題就不需要繞彎子。注意如果插上的是NVMe固態(tài)盤設備名不是sdx而是類似/dev/nvme0n1這樣。其中nvme0表示第0個NVMe控制器n1表示這個控制器上的第1個命名空間。使用習慣不同但邏輯一樣。1.2 設備節(jié)點命名規(guī)律為什么新盤是 sdb 而不是 sda了解Linux的設備命名規(guī)律對掛載操作有很大幫助也能減少誤操作。sda、sdb、sdc這種命名方式是內(nèi)核按照設備被發(fā)現(xiàn)和注冊的順序自動分配的。這里的sd表示 SCSI 磁盤設備現(xiàn)在幾乎所有通過SATA、USB、SAS接口連接的盤在內(nèi)核里都會被映射為SCSI子系統(tǒng)管理所以都以sd開頭。這意味著一個很實際的問題如果你下次重插了某塊盤或者BIOS里改了啟動順序設備名可能會發(fā)生漂移——原來叫/dev/sdb1的分區(qū)重新開機后可能變成/dev/sdc1。所以在永久掛載配置里直接用設備名引用磁盤是不穩(wěn)妥的這個后面講UUID的時候還會深入聊。1.3 驗證磁盤狀態(tài)新盤還是舊盤有沒有分區(qū)表一塊新硬盤出廠時是一張白紙既沒有分區(qū)表也沒有文件系統(tǒng)。而一塊二手盤或者挪過來的舊盤可能已經(jīng)有分區(qū)、有數(shù)據(jù)了。掛載之前如果不先確認盤的狀態(tài)很容易把重要數(shù)據(jù)覆蓋掉。判斷方法很簡單用lsblk看TYPE列如果整塊盤下面沒有任何分區(qū)直接只有一個disk說明是空盤需要先分區(qū)再格式化。如果下面已經(jīng)出現(xiàn)了part子項說明這塊盤以前被分過區(qū)要小心處理不要貿(mào)然格式化。需要檢查這塊盤有沒有被系統(tǒng)識別到但處于“離線”或異常狀態(tài)可以看內(nèi)核日志journalctl -k | grep sd或者用dmesg | grep sd。如果系統(tǒng)識別到新硬件這里會出現(xiàn)類似sd 0:0:0:0: [sdb] 1953525168 512-byte logical blocks的信息。如果什么日志都沒有可能是物理連接問題或者驅動沒有加載這種情況就不是掛載命令能解決的了。2. 分區(qū)與格式化實操新盤如何變成可用的文件系統(tǒng)2.1 分區(qū)表選 MBR 還是 GPT這個選擇影響整塊盤的可用容量確認系統(tǒng)識別到新盤之后下一步是對整塊裸盤進行分區(qū)。分區(qū)表類型的選擇是最關鍵的決策點之一它直接決定了這塊盤能用多大容量。Linux下有兩種主流的分區(qū)表格式MBR傳統(tǒng)主引導記錄和GPT全局唯一標識分區(qū)表。MBR是幾十年前的老格式分區(qū)表只能記錄4個主分區(qū)而且最大只支持約2TB的磁盤容量。GPT則沒有這些限制最多支持128個分區(qū)容量上限大得多已經(jīng)是現(xiàn)代計算機的事實標準。我的建議非常簡單直接2024年之后新做的分區(qū)一律用GPT。無論你的盤是500GB還是8TB無論你裝的是Ubuntu還是DebianGPT都是最穩(wěn)妥的選擇。不用糾結“老機器不兼容GPT”這種說法——只要是支持UEFI啟動的主板都能正常識別GPT分區(qū)。而那些還在用傳統(tǒng)BIOS的機器GPT在數(shù)據(jù)盤上同樣沒有問題因為這里的分區(qū)表是給操作系統(tǒng)用的不屬于系統(tǒng)引導盤的場景。使用parted工具來操作分區(qū)表比fdisk的交互式界面直觀得多。先設置分區(qū)表格式為gptparted /dev/sdb mklabel gpt這里的/dev/sdb要替換為你自己機器上識別到的設備節(jié)點。執(zhí)行完之后可以用parted /dev/sdb print查看分區(qū)表信息確認已經(jīng)變更為GPT。注意mklabel會清空分區(qū)表。如果這塊盤上有舊數(shù)據(jù)執(zhí)行前一定要確認數(shù)據(jù)已經(jīng)備份這一步不可逆。2.2 如何規(guī)劃分區(qū)是給整塊盤一個分區(qū)還是拆開多個分區(qū)表建好之后下一步是創(chuàng)建實際的分區(qū)。這里有個很現(xiàn)實的問題給一塊數(shù)據(jù)盤是直接分一個分區(qū)占滿整個空間還是按需拆成多個分區(qū)我個人的經(jīng)驗是對于個人電腦和工作站的數(shù)據(jù)盤直接一個分區(qū)占滿整塊盤簡單高效維護成本最低。對服務器場景如果這塊盤要承擔不同的業(yè)務比如一個分區(qū)放數(shù)據(jù)庫一個分區(qū)放日志拆分才有意義。用parted創(chuàng)建分區(qū)的交互式操作如下parted /dev/sdb (parted) mkpart primary ext4 0% 100% (parted) align-check optimal 1 (parted) print (parted) quit其中mkpart primary ext4 0% 100%的含義是創(chuàng)建一個從磁盤開頭到末尾的完整分區(qū)。primary表示主分區(qū)在GPT分區(qū)表下這個參數(shù)實際上沒有傳統(tǒng)MBR那樣嚴格的“主/擴展/邏輯”區(qū)分但保留這個寫法沒有壞處。ext4只是給分區(qū)打個標簽告訴分區(qū)表這個分區(qū)預期的文件系統(tǒng)類型實際的文件系統(tǒng)要在格式化時才真正寫入。創(chuàng)建完分區(qū)后一個重要的驗證步驟是用align-check optimal 1檢查分區(qū)是否對齊。現(xiàn)代固態(tài)硬盤和機械硬盤都采用4K物理扇區(qū)如果分區(qū)起始位置沒有對齊到物理扇區(qū)邊界讀寫性能會明顯下降。如果提示1 aligned就說明對齊沒問題。這個問題在純圖形界面的磁盤工具里不會暴露但用命令行操作時值得順手檢查一遍。2.3 格式化文件系統(tǒng)mkfs 命令怎么選參數(shù)分區(qū)創(chuàng)建好之后系統(tǒng)還不知道這個分區(qū)里是什么文件系統(tǒng)所以需要格式化。格式化的本質是在分區(qū)上寫入文件系統(tǒng)元數(shù)據(jù)建立一套“目錄文件”的組織結構這樣才能在里面存放數(shù)據(jù)。Linux下最常用的文件系統(tǒng)是ext4它穩(wěn)定、成熟、支持度高適合絕大多數(shù)應用場景。創(chuàng)建ext4文件系統(tǒng)的命令是mkfs.ext4 /dev/sdb1如果希望在格式化時順帶給分區(qū)設置一個卷標Label方便以后用lsblk一眼認出來可以加-L參數(shù)mkfs.ext4 -L data_disk /dev/sdb1這里-L后面跟的名字建議使用有意義的標識比如data、backup這種以后在圖形界面或者其他工具里看到卷標就不會茫然。還有其他文件系統(tǒng)可以選擇XFS適合大文件順序讀寫和并行IO場景很多企業(yè)級存儲和大數(shù)據(jù)平臺都在用。創(chuàng)建命令是mkfs.xfs /dev/sdb1。Btrfs面向未來設計的文件系統(tǒng)支持寫時復制、快照、子卷等高級功能適合對數(shù)據(jù)管理有高要求的用戶。exFAT當你想在Linux和Windows/macOS之間方便地移動U盤或移動硬盤時exFAT是好選擇。需要先安裝exfatprogs工具包然后用mkfs.exfat /dev/sdb1創(chuàng)建。選擇哪個文件系統(tǒng)沒有絕對的對錯。我個人的原則是沒有特殊需求就用ext4追求大數(shù)據(jù)吞吐考慮XFS跨平臺場景用exFAT。不要為了追求新特性而盲目使用Btrfs除非你清楚它的工作原理并且已經(jīng)做完數(shù)據(jù)備份策略。2.4 用 blkid 和 UUID 記住每塊分區(qū)的“身份證號”格式化完成之后可以用blkid查看分區(qū)的UUID和文件系統(tǒng)類型blkid /dev/sdb1輸出類似/dev/sdb1: UUID3a8f19e7-2b7e-4a54-b7d2-7373ef4b7b0e TYPEext4 PARTLABELprimary PARTUUIDc7d2a13e-1b46-47c9-b8a1-e6a25b1d3b2e這里的UUID是文件系統(tǒng)在被格式化時隨機生成的唯一標識符。它跟設備名不同設備名是內(nèi)核按識別順序動態(tài)分配的換個啟動順序就可能變UUID在文件系統(tǒng)創(chuàng)建時生成除非重新格式化否則基本上終身不變。這就是為什么永久掛載配置/etc/fstab里建議用UUID來引用分區(qū)而不是用/dev/sdb1。后面配置的時候會再詳細說。3. mount 掛載與測試從命令到文件的完整過程3.1 理解掛載的本質把文件系統(tǒng)接入目錄樹的“接線”操作掛載這個詞很多人第一次聽到覺得玄乎。用一句話解釋掛載就是把一塊格式化好的存儲空間接入到系統(tǒng)已經(jīng)存在的目錄樹的某個位置上。在你指定的目錄里你會看到這塊盤上的文件內(nèi)容把它們當作普通目錄文件來讀寫底層實際寫入的是這塊物理盤。這個待接入的目錄叫“掛載點”mount point。Linux系統(tǒng)有一個根目錄/整個系統(tǒng)所有掛載點都在這個目錄樹之下。比如/data是根分區(qū)下一個普通目錄如果把/dev/sdb1掛載到/data那么所有寫入/data的內(nèi)容都會落到/dev/sdb1這塊硬盤上。這樣設計的好處是操作系統(tǒng)無需關心文件在哪個物理設備上只要路徑對就可以直接訪問。也是為什么Linux不像Windows那樣給每塊硬盤分配一個“盤符”的原因——統(tǒng)一目錄樹的思想貫穿始終。3.2 選擇合適的掛載點目錄不要隨手掛到 /mnt 下掛載點的選擇要注意幾點。系統(tǒng)已存在的目錄可以直接作為掛載點但更常見的做法是專門創(chuàng)建一個新目錄比如mkdir -p /data這個目錄創(chuàng)建在根分區(qū)上占用根分區(qū)的少量空間但它只是一個“門洞”真正的內(nèi)容都在掛載的分區(qū)上。掛載之后/data目錄原有的內(nèi)容會被隱藏掉直到卸載之后才會重新出現(xiàn)。所以不要在一個有數(shù)據(jù)的目錄上直接掛載新盤否則數(shù)據(jù)會被“遮住”讓人誤以為丟了。有些人習慣把數(shù)據(jù)盤掛在/mnt下。/mnt是系統(tǒng)默認的臨時掛載點很多自動腳本會在這里活動把個人數(shù)據(jù)盤掛在/mnt下面既不規(guī)范也容易引起沖突。建議按用途創(chuàng)建有意義的頂層目錄比如/data、/home如果你想把home放到獨立盤的話、/srv等。規(guī)范一點的服務器環(huán)境還會采用/data0、/data1這種多數(shù)據(jù)盤的命名方式。3.3 臨時掛載與卸載操作mount 與 umount 的參數(shù)細節(jié)掛載命令的標準格式是mount [選項] 設備 掛載點執(zhí)行臨時掛載mount /dev/sdb1 /data這條命令不指定文件系統(tǒng)類型時系統(tǒng)會自動檢測分區(qū)的文件系統(tǒng)通過blkid和內(nèi)核識別絕大多數(shù)ext4場景下可以省略-t ext4參數(shù)。掛載后驗證是否成功最直接的方式是用df -hTdf -hT | grep datadf是“disk free”的縮寫-h表示人類可讀的容量單位G、T-T表示顯示文件系統(tǒng)類型??吹筋愃葡旅娴妮敵稣f明掛載成功了/dev/sdb1 ext4 932G 5.0G 879G 1% /data此時向/data寫入任意文件都會實際寫入到/dev/sdb1這塊盤。卸載操作是umountumount /data這里有個新手經(jīng)常碰到的坑卸載時提示target is busy。原因一定是有進程正在使用掛載點下的文件比如某個終端當前工作目錄在這個掛載點里或者是某個服務正在寫文件。排查方法是用lsof D /data或者fuser -vm /data找出占用進程等進程結束后再卸載。3.4 掛載參數(shù)怎么加noatime、discard、nosuid 這些到底要不要寫mount命令支持多個掛載參數(shù)用-o指定多個參數(shù)用逗號分隔。下面這幾個是我在實際操作中經(jīng)常用到且值得關注的核心參數(shù)。noatimeLinux默認會記錄文件被訪問的時間atime。對絕大多數(shù)應用來說訪問時間沒有實用價值每次讀文件都要更新這個時間戳會帶來無謂的磁盤寫入。加上noatime可以明顯減少小文件讀寫的磁盤IO。做數(shù)據(jù)庫、Web服務、文件存儲的機器這個參數(shù)幾乎必加。discard這個參數(shù)對SSD有意義。掛載時額外輸入discard再刪除大量文件時文件系統(tǒng)會通過TRIM指令通知SSD哪些塊可以清理幫助保持長期寫入性能。但需要注意TRIM是異步還是同步執(zhí)行跟硬件和文件系統(tǒng)有關同步TRIM可能在某些型號的SSD上造成延遲?,F(xiàn)在很多SSD固件已經(jīng)支持排隊TRIM使用ext4也不用過度擔心。如果你拿不準可以先不加用fstrim定期手動TRIM也是一種常見做法。采用defaults掛載時不會自動包含這個參數(shù)。nosuid掛載點為普通數(shù)據(jù)目錄時加上nosuid可以防止在掛載的分區(qū)上執(zhí)行setuid程序這是一種基本的安全加固。平時用discretion并不大但服務器環(huán)境建議加上。noexec與nosuid類似禁止掛載點下的文件直接執(zhí)行。這兩個參數(shù)對防惡意上傳文件有一定的防護意義普通家用環(huán)境看需求加。舉個例子一段考慮了參數(shù)優(yōu)化的掛載命令mount -o rw,noatime,nosuid /dev/sdb1 /data4. 永久掛載配置讓系統(tǒng)重啟后自動掛載的 fstab 詳解4.1 臨時掛載的問題重啟之后一切歸零使用mount命令的掛載是臨時性的。系統(tǒng)重啟后內(nèi)核重新初始化塊設備mount命令注入的掛載關系會全部消失那塊盤會變回“未掛載”狀態(tài)。之前辛辛苦苦配置好的數(shù)據(jù)目錄重啟后里面就空了。要讓系統(tǒng)每次開機都自動掛載指定分區(qū)需要修改系統(tǒng)掛載配置文件/etc/fstab。fstab 是file systems table的縮寫系統(tǒng)在啟動過程中會讀取這個文件按照其中規(guī)則逐條掛載所有需要自動掛載的分區(qū)。直接編輯 fstab 之前務必先備份cp /etc/fstab /etc/fstab.bak這個習慣在我處理系統(tǒng)配置文件時幾乎形成肌肉記憶了一次備份能讓你犯錯時少一晚上失眠。4.2 fstab 六列含義逐個拆解/etc/fstab中每一行描述一個掛載項總共6列用空格或Tab分隔。以最常見的寫法為例UUID3a8f19e7-2b7e-4a54-b7d2-7373ef4b7b0e /data ext4 defaults,noatime 0 2下面每一列的具體含義列號字段含義示例1設備標識要掛載的分區(qū)引用方式UUIDxxx或/dev/sdb12掛載點分區(qū)接入目錄樹的位置/data3文件系統(tǒng)類型ext4、xfs、exfat等ext44掛載參數(shù)多個參數(shù)逗號分隔defaults,noatime5是否dump備份0表示不備份1表示備份06fsck檢查順序根分區(qū)為1其他分區(qū)為20表示不檢查2第5列和第6列很多人會寫成0 0對數(shù)據(jù)盤來說通常沒問題。但第6列如果填2系統(tǒng)開機時會按順序對分區(qū)做文件系統(tǒng)檢查如果填0則開機不會檢查。個人數(shù)據(jù)盤填2是比較穩(wěn)妥的做法萬一文件系統(tǒng)有損壞開機自檢能提前發(fā)現(xiàn)。掛載參數(shù)列defaults是系統(tǒng)默認參數(shù)集合包括 rw、suid、dev、exec、auto、nouser、async。如果你沒有特別需要直接寫defaults即可。在defaults的基礎上追加noatime的實際寫法是defaults,noatime中間沒有空格。4.3 用UUID還是設備名為什么我堅決推薦UUIDfstab第一列寫成/dev/sdb1不是不能用但前面提過設備名有漂移風險。舉個例子某機器有兩塊盤sda和sdb某次開機時BIOS識別順序變了原來在sdb上的數(shù)據(jù)盤變成了sda原來系統(tǒng)盤變成了sdb如果你的fstab寫的是/dev/sdb1啟動時系統(tǒng)可能就把系統(tǒng)盤掛到/data上了——輕則目錄內(nèi)容錯亂重則系統(tǒng)起不來。而UUID是文件系統(tǒng)創(chuàng)建時生成的隨機標識不依賴設備名不會因為盤序變化而改變。所以fstab第一列優(yōu)先用UUID形式這是我給所有生產(chǎn)環(huán)境配置掛載時堅持的原則。獲取UUID的方式前面已經(jīng)演示過blkid還有一種方式是lsblk -f輸出更直觀會直接把文件系統(tǒng)類型和UUID列在分區(qū)旁邊。4.4 配置完成后的驗證流程mount -a 與重啟前的自查fstab 寫完之后千萬不能直接重啟。這個文件如果有語法錯誤或設備引用錯誤系統(tǒng)開機時可能卡在緊急模式emergency mode到時只能通過維護模式修復很麻煩。正確的驗證流程分三步第一步執(zhí)行mount -a讓系統(tǒng)按照fstab重新掛載所有條目。如果沒有任何輸出說明語法和掛載本身沒有報錯mount -a這里-a表示mount all讀/etc/fstab中的所有條目嘗試掛載。第二步用df -hT確認新掛載的分區(qū)已經(jīng)在目錄樹中df -hT | grep data第三步如果條件允許直接重啟一次確認開機后分區(qū)自動掛載成功。這一步雖然耗時但能徹底消除“開機掛載失敗”的隱患。我在生產(chǎn)環(huán)境配置新盤之后都會執(zhí)行一次避免第二天客戶打電話說數(shù)據(jù)目錄是空的。5. 常見問題與排查技巧實錄掛載失敗的跨國流程一覽5.1 開機卡在緊急模式誰動了我的 /etc/fstabfstab 配置若出錯最典型的癥狀是開機時系統(tǒng)提示無法掛載某個文件系統(tǒng)進入 emergency mode。屏幕上會有類似You are in emergency mode或者Press Enter for maintenance的提示。出現(xiàn)這種情況不要慌修復流程是這樣的進入維護模式后系統(tǒng)文件系統(tǒng)通常還是只讀狀態(tài)。先執(zhí)行mount -o remount,rw /讓根分區(qū)以可寫方式重新掛載然后查看fstab里哪一行寫錯了grep -v ^# /etc/fstab定位到問題行后用blkid核對正確的UUID修改fstab最后用mount -a驗證。確認無誤后執(zhí)行reboot重新啟動。這個問題的根源絕大多數(shù)情況下是fstab里設備名或UUID寫錯或者標點符號不對比如漏了分隔符。之前備份的/etc/fstab.bak此刻就能派上大用場不確定怎么改就直接恢復備份cp /etc/fstab.bak /etc/fstab5.2 掛載后目錄權限不對只能看不能寫的問題排查掛載成功后往目錄里寫入文件有時候會收到Permission denied的報錯。這個問題在新手身上出現(xiàn)頻率非常高很多時候不是掛載命令的問題而是文件系統(tǒng)的屬主和權限問題。新格式化的ext4文件系統(tǒng)默認root擁有且權限為rwxr-xr-x普通用戶只能讀和執(zhí)行不能創(chuàng)建文件。解決辦法就是給目標用戶或用戶組授權chown -R 用戶名:用戶組 /data chmod -R 755 /data如果掛了多個用戶的共享盤不想用chown改變屬主可以改用掛載參數(shù)uid和gid直接指定掛載后的文件屬主這在掛載exFAT、NTFS這類不帶原生Unix權限的Windows文件系統(tǒng)時尤其好用。比如mount -o uid1000,gid1000 /dev/sdb1 /data5.3 突然掛載不上分區(qū)被別人占用了怎么辦有時執(zhí)行mount會報錯mount point is busy或者device is busy。原因無非是掛載點正被某個進程占用或者設備已經(jīng)被其他掛載點使用。先用mount | grep sdb1看這個分區(qū)是否已經(jīng)被掛載到別處再用lsof D /data排查是誰占用。如果是掛載點目錄被占用而不是設備被占用卸載時也會遇到同樣的提示解決方式是用umount -l強制卸載注意這個操作可能造成數(shù)據(jù)尚未落盤寫入不推薦在有大量寫操作的場景下使用。5.4 exFAT/NTFS 移動硬盤掛載跨平臺文件系統(tǒng)亂碼或權限異常把U盤或移動硬盤插到Ubuntu上有時能自動掛載有時不行或者掛載后中文文件名變成亂碼。這通常是因為系統(tǒng)缺了對應的文件系統(tǒng)驅動。exFAT需要裝exfatprogsNTFS需要裝ntfs-3gsudo apt update sudo apt install exfatprogs ntfs-3g裝好之后手動掛載即可。NTFS移動硬盤在Linux下掛載默認權限比較寬松適合讀取拷貝。但如果要向NTFS盤寫入大量小文件建議使用big_writes參數(shù)提升寫性能需要在掛載參數(shù)里加big_writes。mount -o big_writes /dev/sdb1 /mnt/usb這個參數(shù)是否有效也取決于ntfs-3g版本新版本默認行為有所優(yōu)化但加上無妨。5.5 熱插拔 SATA 硬盤不識別硬件的鍋還是系統(tǒng)的鍋機箱支持熱插拔的SATA硬盤插入后系統(tǒng)有時不會自動識別。先確認主板BIOS里SATA模式是否設置為AHCI而不是IDE兼容模式。AHCI模式下才支持熱插拔。系統(tǒng)側可以執(zhí)行echo - - - /sys/class/scsi_host/host0/scan強制掃描或者用udevadm trigger觸發(fā)重新識別sudo udevadm trigger如果掃描之后還是看不到就換數(shù)據(jù)線、換板載接口排查硬件問題。我遇到過客服咨詢說“怎么掛載都不識別”的情況結果最后發(fā)現(xiàn)是新盤沒通電SATA供電線松了——這種操作層面的失誤排查優(yōu)先級應該放在最開始。6. 一套標準操作流程從新盤到開機自動掛載的全流程腳本前面把每一步的原理和細節(jié)都掰開講過了這里我把整個流程串起來給出一份可以直接照著敲的完整流程方便大家作為一個模板來復制使用。# 1. 查看系統(tǒng)里的磁盤 lsblk # 2. 確定設備節(jié)點比如 /dev/sdb建GPT分區(qū)表 sudo parted /dev/sdb mklabel gpt # 3. 創(chuàng)建占滿全盤的唯一分區(qū) sudo parted /dev/sdb mkpart primary ext4 0% 100% # 4. 分區(qū)對齊檢查 sudo parted /dev/sdb align-check optimal 1 # 5. 格式化文件系統(tǒng)ext4 sudo mkfs.ext4 -L data_disk /dev/sdb1 # 6. 獲取UUID sudo blkid /dev/sdb1 # 7. 創(chuàng)建掛載點 sudo mkdir -p /data # 8. 臨時掛載 sudo mount /dev/sdb1 /data # 9. 驗證掛載 df -hT # 10. 備份fstab sudo cp /etc/fstab /etc/fstab.bak # 11. 把掛載信息寫入fstab注意UUID換成實際值 echo UUID你的UUID /data ext4 defaults,noatime 0 2 | sudo tee -a /etc/fstab # 12. 驗證fstab sudo mount -a執(zhí)行到第12步?jīng)]有報錯再結合df -hT和一次重啟驗證整個掛載流程就收尾了。很多線上文檔講到第8步就結束忽悠人以為臨時掛載完就算完事不寫fstab重啟之后盤又消失這就是很多人“掛載硬盤存數(shù)據(jù)存著存著盤沒了”的真相。我在實際工作里會把第6步的UUID先寫在小本本上或者直接復制到fstab那一條里因為在整個流程里最容易出錯的就是UUID復制不全或者格式寫錯。fstab里UUID格式是UUID一串字符中間不要有引號不要有多余空格這串字符全小寫不帶符號。7. 掛載完成后我還會做的三件小事7.1 設置開機TRIMSSD用戶必看如果掛載的是NVMe或者SATA SSD建議設置一個每周TRIM任務讓文件系統(tǒng)定期通知SSD清理已刪除的塊?,F(xiàn)在很多Linux發(fā)行版自帶的fstrim.timer已經(jīng)是默認啟用狀態(tài)可以用下面的命令檢查systemctl status fstrim.timer如果沒有啟用執(zhí)行sudo systemctl enable --now fstrim.timerTRIM這件事直接掛載參數(shù)加discard是一種做法用定期fstrim是更可控的做法兩個選一個就行不要同時用免得有的SSD固件對頻繁TRIM反而處理不過來回導致IO卡頓。7.2 設置一個簡單的訪問權限收斂數(shù)據(jù)盤掛載之后我通常不會讓它對所有用戶開放。如果個人機器直接chown給自己用就夠了。如果是多人共享的工作站可以把目錄組權限設成770把需要訪問的用戶加進同一個組chown -R root:data_group /data chmod -R 770 /data usermod -aG data_group 用戶名這樣普通用戶看不到盤里的目錄結構能有效防止手滑誤刪別人的文件。權限設計不用一開始就做得很復雜簡單按“組”劃分已經(jīng)能覆蓋大多數(shù)場景。7.3 新建掛載點不要放在 /media 下自動生成的目錄桌面版Ubuntu插入USB移動硬盤時桌面環(huán)境和自動掛載到/media/用戶名/卷標目錄。這種臨時掛載機制很方便但如果你把一塊固定的內(nèi)盤也掛在這種動態(tài)目錄下路徑會因為插入時間、卷標變化而發(fā)生變化寫腳本、配服務都會很痛苦。固定數(shù)據(jù)盤一定要規(guī)劃一個不動搖的路徑比如/data、/srv/data這種不要依賴動態(tài)創(chuàng)建的臨時掛載點。我個人在實際操作中最深刻的體會是掛載硬盤就像給新員工安排工位你得先告訴人事系統(tǒng)來了個新人設備分一個工位分區(qū)貼上名牌文件系統(tǒng)格式化卷標然后把門牌號掛載點登記到通訊錄fstab以后每天開門開機才能自動坐到位置上。只把人領進門、不登記通訊錄第二天開門的時候就全亂套了。希望這篇關于Ubuntu掛載硬盤的完整復盤能幫你少走點彎路路上踩過的每一個坑都是學費換來的經(jīng)驗別讓它白交。