寫在前面:前段時間新裝了一臺服務器,/home目錄原本是掛在在系統盤
/dev/sda4的分區下
,但是系統盤的空間比較小,為了保證后續使用起來,不會遇到磁盤很快就占滿的情況,現在需要將/home
獨立出來,掛載到另一塊 NVMe 高速硬盤/dev/nvme0n1p1
上,這樣新用戶的主目錄將存儲在這塊 3.5T 空間充足的硬盤上,而不是原來的/dev/sda4
(僅 831G)。
🔹 1、列出系統的塊設備
lsblk # lsblk -f 可以查看文件系統類型、UUID 等
lsblk
是 Linux 下一個非常實用的命令,主要用于 列出系統中所有的塊設備(block devices),包括硬盤、分區、U盤、SSD 等,可以得知nvme0n1p1的高速硬盤目前是掛載在data目錄下;
結果解讀:
-
NAME
:設備名稱 -
TYPE
:設備類型(disk
是物理磁盤,part
是分區) -
MOUNTPOINT
:當前掛載在哪個目錄
🧩 lsblk
的作用總結:
功能 | 說明 |
---|---|
查看磁盤和分區結構 | 顯示硬盤、分區、掛載點等信息 |
不顯示RAM | 與 df 不同,它只關注磁盤類設備,不顯示內存使用 |
可以顯示文件系統類型、掛載點等 | 加參數 -f 可以顯示 FSTYPE、LABEL、UUID 等 |
輔助掛載/格式化 | 常與 mount 、mkfs 、fstab 配合使用 |
🔹 2、確認要遷移新磁盤是 ext4
lsblk -f # 輸出的 FSTYPE 那里顯示ext4即可
確認 FSTYPE
是 ext4
,如果沒有格式化,執行:
sudo mkfs.ext4 /dev/nvme0n1p1
?? 這將清空分區!
🔹 3、創建臨時掛載點并掛載新分區
sudo mkdir /mnt/new_home
sudo mount /dev/nvme0n1p1 /mnt/new_home
這步首先在 /mnt
目錄下創建一個名為 new_home
的空目錄,用作臨時掛載點。
📌 說明:
-
/mnt
是 Linux 中推薦用來臨時掛載其他設備的標準目錄。 -
你不能直接把分區掛載到
/home
,因為/home
當前正在使用。 -
所以你先創建
/mnt/new_home
,后續可以把目標分區掛載到這里進行數據操作。
將你的 NVMe 磁盤分區(/dev/nvme0n1p1
)掛載到剛剛創建的 /mnt/new_home
。
📌 說明:
-
mount
是 Linux 的掛載命令,它將一個磁盤分區關聯到系統目錄結構中。 -
掛載后,你就可以像訪問普通文件夾一樣訪問該磁盤內容,例如:
ls /mnt/new_home
-
這個操作是臨時生效的,重啟后會失效,除非寫入到
/etc/fstab
。
🔹 4、復制當前 /home
數據到新分區
sudo rsync -aXS --progress /home/ /mnt/new_home/
確保所有文件完整復制,包括權限和軟連接。
🔧 參數說明
參數 | 功能 |
---|---|
-a | 歸檔模式,保留文件的所有屬性(權限、時間戳、符號鏈接等) |
-X | 保留擴展屬性(如 ACL、SELinux 安全上下文) |
-S | 稀疏文件優化(sparse file),節省磁盤空間 |
--progress | 顯示每個文件的復制進度(用于大文件時很有用) |
🔹 5、備份并編輯 /etc/fstab
?
sudo cp /etc/fstab /etc/fstab.bak
sudo vim /etc/fstab
前面我們知道/data目錄是掛載在NVMe 高速硬盤 /dev/nvme0n1p1上的,所以我們只需要把這里的/data修改為/home即可;
該文件每列的說明如下:
列 | 說明 |
---|---|
file system | 分區標識(設備路徑或 UUID) |
mount point | 掛載點(系統目錄) |
type | 文件系統類型(如 ext4 , vfat , swap ) |
options | 掛載選項(如 defaults , ro , noatime ) |
dump | 是否需要 dump 備份(一般為 0) |
pass | 是否在開機時進行 fsck 檢查(0=不檢,1=優先,2=其次) |
🔹 6、準備切換掛載點
sudo mv /home /home.bak # 臨時備份舊 home:把當前系統中的 /home 目錄重命名為 /home.bak(備份),為新的 /home 騰出掛載點
sudo mkdir /home # 創建空目錄用于掛載:創建一個新的空 /home 目錄,準備掛載新的 /home(此時掛載的是 /dev/nvme0n1p1)
sudo mount -a # 重新掛載所有文件系統:按照 /etc/fstab 中的配置重新掛載所有文件系統,此時 /dev/nvme0n1p1 應該會掛載到新建的 /home 上
🔹 7、驗證掛載是否成功
df -h /home
輸出如下則說明/home掛載到了 /dev/nvme0n1p1
,成功 ??
🔹 8、清理舊的 /home
?
如果一切正常,則可以刪除:
sudo rm -rf /home.bak
實現效果:
-
所有用戶的主目錄都在
/dev/nvme0n1p1
上 -
系統分區
/dev/sda4
不再承擔/home
的存儲負擔 -
新建用戶默認目錄
/home/username
也會自動位于新磁盤上
🔹 9、刪除臨時掛載目錄/mnt/new_home
?
(1)卸載 /mnt/new_home
(保險起見)
sudo umount /mnt/new_home
?? 如果你之前用 mount
掛載了 /dev/nvme0n1p1
到這里,這一步可以釋放它。
(2)刪除臨時目錄
sudo rmdir /mnt/new_home
補充說明:
-
rmdir
只能刪除空目錄(它應該是空的) -
如果你不執行
umount
,目錄是可以刪除的,但推薦先umount
更安全 -
刪除這個目錄不會影響
/home
,因為新/home
現在指向的是分區,而不是/mnt/new_home
🔹 10、卸載data
lsblk
# 若輸出如下,則說明/dev/nvme0n1p1 同時掛載在兩個地方: /home 和 /data
# └─nvme0n1p1 259:1 0 3.5T 0 part /home
# /data
sudo umount /data # 卸載data
最終輸出如下即可,說明修改成功: