前言
公司發的電腦是 128G SSD + 512G 機械硬碟,我當時直接將 Arch Linux 裝在了 SSD 上,分割槽形式如下:
➜ ~ lsblk -f
NAME FSTYPE FSVER LABEL UUID FSAVAIL FSUSE% MOUNTPOINTS
sda
├─sda1
│ swap 1 ee4a2a29-3f56-4f87-b905-93039bd54e66 [SWAP]
└─sda2
ext4 1.0 68d3f420-6e49-4e45-9bdd-a83575de198e 118.1G 99% /
整個電腦只剩下 8G 左右的 SSD,經常用一段時間就得想辦法清一清,實在忍受不了了,決定搞一個 256G 的 SSD,將老的換掉!!!
本文介紹該操作的詳細過程,涉及到:
1)硬碟整個拷貝技術
2)新建 home 分割槽技術
3)修改 fstab 實現自動掛載
1. 實操
1.1 整個磁碟拷貝
- 將 SSD 插入原電腦,被識別為
/dev/sdb
- 利用
sudo fdisk /dev/sdb
將其現有分割槽全部刪除 - 利用
sudo mkfs.ext4 /dev/sdb
將其格式化 - 利用
sudo dd if=/dev/nvme0n1 of=/dev/sdb
將原硬碟拷貝到新硬碟(會2個小時左右,時間較長)
1.2 建立 home 分割槽
-
此時將新 SSD 安裝到主機板上,配置電腦從該新硬碟啟動,會發現我們已經複製了一個一模一樣的系統(假設新硬碟被識別為
/dev/sda
) -
利用
sudo fdisk /dev/sda
將新硬碟剩下的 100G 左右的空間建立一個主分割槽:/dev/sda3
-
利用下列命令,將
/dev/sda3
掛載到/mnt/home
下(拷貝過程中有些 cache 檔案報錯,可以不管)cd /mnt sudo mkdir home sudo mount /dev/sda3 /mnt/home
-
利用
sudo cp -ra /home/* /mnt/home
將現在的 home 下的內容拷貝到 /mnt/home 下 -
利用下列命令,將
/dev/sda3
重新掛載到/home
下sudo umount /dev/sda3 cd / mv home home_bk sudo mkidr home sudo mount /dev/sda3 /home
1.3 修改 fstab 實現自動掛載
-
檢視當前的 fstab:
➜ /mnt cat /etc/fstab # Static information about the filesystems. # See fstab(5) for details. # <file system> <dir> <type> <options> <dump> <pass> # /dev/nvme0n1p2 UUID=68d3f420-6e49-4e45-9bdd-a83575de198e / ext4 rw,relatime 0 1 # /dev/nvme0n1p1 UUID=ee4a2a29-3f56-4f87-b905-93039bd54e66 none swap defaults,pri=-2 0 0
-
檢視當前
/dev/sda
分割槽情況:➜ ~ lsblk -f NAME FSTYPE FSVER LABEL UUID FSAVAIL FSUSE% MOUNTPOINTS sda ├─sda1 │ swap 1 ee4a2a29-3f56-4f87-b905-93039bd54e66 [SWAP] ├─sda2 │ ext4 1.0 68d3f420-6e49-4e45-9bdd-a83575de198e 69.1G 31% / └─sda3 ext4 1.0 b8f27505-9096-4717-84ae-eb23dd3a7cd6 35.9G 60% /home
-
對比上面兩步的資訊,我們只需要將 sda3 的掛載資訊寫入 fstab 中,最終 fstab 如下:
➜ /mnt cat /etc/fstab # Static information about the filesystems. # See fstab(5) for details. # <file system> <dir> <type> <options> <dump> <pass> # /dev/nvme0n1p2 UUID=68d3f420-6e49-4e45-9bdd-a83575de198e / ext4 rw,relatime 0 1 # /dev/nvme0n1p1 UUID=ee4a2a29-3f56-4f87-b905-93039bd54e66 none swap defaults,pri=-2 0 0 UUID=b8f27505-9096-4717-84ae-eb23dd3a7cd6 /home ext4 defaults 0 0
-
刪除 home_bk,重啟系統,系統會檢查 sda3,可能會報一些 cache 檔案的錯誤,到時候按照說明,將這些 cache 檔案忽略或刪除即可。
2. 涉及到的知識點
2.1 fstab
fstab 檔案可用於定義磁碟分割槽,各種其他塊裝置或遠端檔案系統應如何裝入檔案系統。系統啟動會根據該檔案呼叫 mount 命令,將相應分割槽掛載到合適地方。如何讀懂修改該檔案,只需要看參考連結[1]即可獲得詳細資訊。
2.2 dd 命令
dd:用指定大小的塊拷貝一個檔案,並在拷貝的同時進行指定的轉換。常用來硬碟/分割槽拷貝、備份,例如:
1.將本地的/dev/hdb整盤備份到/dev/hdd
dd if=/dev/hdb of=/dev/hdd
2.將/dev/hdb全盤資料備份到指定路徑的image檔案
dd if=/dev/hdb of=/root/image
3.將備份檔案恢復到指定盤
dd if=/root/image of=/dev/hdb
4.備份/dev/hdb全盤資料,並利用gzip工具進行壓縮,儲存到指定路徑
dd if=/dev/hdb | gzip > /root/image.gz
5.將壓縮的備份檔案恢復到指定盤
gzip -dc /root/image.gz | dd of=/dev/hdb
......
更多,請看參考連結[2]
2.3 fdisk 命令
1)fdisk -l 可用於檢視硬碟和分割槽情況
➜ ~ sudo fdisk -l
[sudo] password for btfz:
Disk /dev/sda: 223.57 GiB, 240057409536 bytes, 468862128 sectors
Disk model: KINGSTON SV300S3
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0xdbdddf59
Device Boot Start End Sectors Size Id Type
/dev/sda1 2048 16779263 16777216 8G 83 Linux
/dev/sda2 16779264 250069679 233290416 111.2G 83 Linux
/dev/sda3 250071040 468862127 218791088 104.3G 83 Linux
Disk /dev/sdb: 111.79 GiB, 120034123776 bytes, 234441648 sectors
Disk model: KINGSTON SA400S3
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0xd863d634
Device Boot Start End Sectors Size Id Type
/dev/sdb1 2048 234441647 234439600 111.8G 83 Linux
Disk /dev/sdc: 14.84 GiB, 15931539456 bytes, 31116288 sectors
Disk model: Storage Device
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x044a6a07
Device Boot Start End Sectors Size Id Type
/dev/sdc1 * 2048 31116287 31114240 14.8G c W95 FAT32 (LBA)
2)fdisk /dev/sda 可用於建立和刪除分割槽(該例子摘抄參考連結[3])
fdisk /dev/sda
WARNING: DOS-compatible mode is deprecated. It's strongly recommended to
switch off the mode (command 'c') and change display units to
sectors (command 'u').
Command (m for help): p #檢視分割槽表資訊
Disk /dev/sda: 32.2 GB, 32212254720 bytes
255 heads, 63 sectors/track, 3916 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x0005210c
Device Boot Start End Blocks Id System
/dev/sda1 * 1 26 204800 83 Linux
Partition 1 does not end on cylinder boundary.
/dev/sda2 26 1301 10240000 83 Linux
/dev/sda3 1301 1497 1572864 82 Linux swap / Solaris
/dev/sda4 1497 2611 8952832 83 Linux
Command (m for help): d #刪除分割槽
Partition number (1-4): 4 #刪除第四個
Command (m for help): p #再次檢視分割槽資訊,/dev/sda4已被刪除
Disk /dev/sda: 32.2 GB, 32212254720 bytes
255 heads, 63 sectors/track, 3916 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x0005210c
Device Boot Start End Blocks Id System
/dev/sda1 * 1 26 204800 83 Linux
Partition 1 does not end on cylinder boundary.
/dev/sda2 26 1301 10240000 83 Linux
/dev/sda3 1301 1497 1572864 82 Linux swap / Solaris
Command (m for help): n #建立新的分割槽
Command action
e extended
p primary partition (1-4)
p #建立為主分割槽
Selected partition 4
First cylinder (1497-3916, default 1497): #經對比,正好和上一個磁碟柱一致,預設即可
Using default value 1497
Last cylinder, +cylinders or +size{K,M,G} (1497-3916, default 3916):
Using default value 3916 #直接預設就可以
Command (m for help): p #檢視分割槽表資訊
Disk /dev/sda: 32.2 GB, 32212254720 bytes
255 heads, 63 sectors/track, 3916 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x0005210c
Device Boot Start End Blocks Id System
/dev/sda1 * 1 26 204800 83 Linux
Partition 1 does not end on cylinder boundary.
/dev/sda2 26 1301 10240000 83 Linux
/dev/sda3 1301 1497 1572864 82 Linux swap / Solaris
/dev/sda4 1497 3916 19436582 83 Linux
Command (m for help): wp #儲存並退出,如果建立有誤,直接退出不要儲存即可
The partition table has been altered!
Calling ioctl() to re-read partition table.
WARNING: Re-reading the partition table failed with error 16: Device or resource busy.
The kernel still uses the old table. The new table will be used at
the next reboot or after you run partprobe(8) or kpartx(8)
Syncing disks.
2.4 lsblk 命令
lsblk(列出塊裝置)命令用於列出所有可用塊裝置的資訊,但是,它不會列出RAM盤的資訊。塊裝置有硬碟,快閃記憶體盤,CD-ROM等等。
➜ /mnt lsblk -f
NAME FSTYPE FSVER LABEL UUID FSAVAIL FSUSE% MOUNTPOINTS
sda
├─sda1 swap 1 ee4a2a29-3f56-4f87-b905-93039bd54e66 [SWAP]
├─sda2 ext4 1.0 68d3f420-6e49-4e45-9bdd-a83575de198e 69.1G 31% /
└─sda3 ext4 1.0 b8f27505-9096-4717-84ae-eb23dd3a7cd6 35.8G 60% /home
sdb
└─sdb1 ext4 1.0 3107bb63-4029-433b-9131-5536ab2f3664
sdc
└─sdc1 vfat FAT32 ARCH_202110 E01F-1B25
後記
這篇文章記錄了,如何拷貝並擴容一個 Arch Linux 系統,樓主這樣操作後終於不用再擔心硬碟資源不夠的問題了~,希望其他人遇到相同問題時可以幫助快速解決問題。
連結
[1]. fstab arch doc
[2]. linux命令總結dd命令詳解-琴酒網路
[3]. Linux下使用fdisk擴充套件分割槽容量
[4]. 1、virtualbox中安裝archlinux+i3桌面,並做簡單美化
[5]. ARCH LINUX 常見問題及實用工具彙總
: 陸續更新中...