[LINUX] Arch Linux 硬盤拷貝式裝系統+新增 home 分區



前言

公司發的電腦是 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 常見問題及實用工具彙總



: 陸續更新中...

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章