Linux下給分區擴容
在使用VPS/虛擬機/U盤安裝的Linux時可能會遇到需要給分區擴容的情況(前提儲存介質也變大了),下面以Debian 9安裝在U盤上的實體機和Ubuntu 16.04虛擬機來說說擴容的方法。
因為是要給root分區也就是運行系統那個分區擴容,所以需要關機,然後把儲存介質安裝到另一台機器上。運行的Linux沒法umount自己的root。這裡我把裝有debian的u盤拔下來插到Win10的PC上,再在虛擬機里連接U盤。
以下操作在Ubuntu虛擬機內進行:
- lsblk 看看是哪個才是U盤,我這裡是/dev/sdb1,
$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sdb 8:16 1 59.5G 0 disk
└─sdb1 8:17 1 6.9G 0 part /media/xxx/xxxx
sda 8:0 0 40G 0 disk
└─sda1 8:1 0 40G 0 part /
2. 然後卸載U盤的分區,使用
$ sudo umount /dev/sdb1
3. 打開parted命令行分區軟體來對U盤進行分區:
$ sudo parted /dev/sdb
4. 使用"unit s"和"print"切換顯示單位並顯示當前U盤以有分區:
GNU Parted 3.2
Using /dev/sdb
Welcome to GNU Parted! Type help to view a list of commands.
(parted) unit s
(parted) print
Model: Generic Mass-Storage (scsi)
Disk /dev/sdb: 124735488s
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags:
Number Start End Size Type File system Flags
1 2048s 14477311s 14475264s primary ext4 boot
2 14479358s 15521791s 1042434s extended
5. 可以看到有兩個分區,一個是存有數據和系統的1號分區,另一個是空的2號分區,當然可能也會沒有2號分區,如果有2號無用分區,輸入rm 2刪掉。記住分區1的開始位置,這裡是2048s,然後輸入rm 1刪掉(沒刪數據,數據都在)。
(parted) rm 2
(parted) rm 1
6. 分配全部空間,這裡2048s是之前分區1開始的位置,要一致不然爆炸:
(parted) mkpart primary 2048s 100%
7. 為分區1重新加入啟動標誌:
(parted) set 1 boot on
(parted) print
Model: Generic Mass-Storage (scsi)
Disk /dev/sdb: 124735488s
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags:
Number Start End Size Type File system Flags
1 2048s 124735487s 124733440s primary boot, lba
8. 這時候看到parted無法識別文件系統,不用慌,後面會弄回來,打quit退出即可,這裡會提示"Information: You may need to update /etc/fstab." 無視掉繼續
9. 現在需要恢復文件系統
$ sudo e2fsck -f /dev/sdb1
e2fsck 1.43.1 (08-Jun-2016)
Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
Pass 4: Checking reference counts
Pass 5: Checking group summary information
/dev/sdb1: 42341/452480 files (0.2% non-contiguous), 398667/1809408 blocks
如果這一步提示
e2fsck 1.42.13 (17-May-2015)
/dev/sdb1 has unsupported feature(s): metadata_csum
e2fsck: Get a newer version of e2fsck!
那麼說明e2fsck版本不夠高,目前窩知道的只能自己編譯。
沒出錯就跳到第12步。
10. 下載最新e2fsck源碼並編譯,並不需要很久,輸出太多了而且沒啥必要看所以都省略了:
$ wget http://downloads.sourceforge.net/project/e2fsprogs/e2fsprogs/v1.43.1/e2fsprogs-1.43.1.tar.gz
$ tar xzf e2fsprogs-1.43.1.tar.gz
$ cd e2fsprogs-1.43.1
$ ./configure
$ make
如果中間有出錯的話多半是缺少了編譯或者構建的工具,網上查一查應該很好補全。
11. 用最新e2fsck:
$ cd e2fsck/
$ sudo ./e2fsck -f /dev/sdb1
12. 這時可以用"sudo mount /dev/sdb1 /mnt"看看文件是不是都在,然後再"sudo umount /dev/sdb1"
13. 從虛擬機里退出U盤(Vmware player 里),並把U盤插到原來運行Debian的電腦上,開機,這時候應該能直接進系統。
14. 進入系統之後,打lsblk和df -h查看大小,會發現不一樣:
$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 1 59.5G 0 disk
└─sda1 8:1 1 59.5G 0 part /
sr0 11:0 1 1024M 0 rom
$ df -h
Filesystem Size Used Avail Use% Mounted on
udev 2.0G 0 2.0G 0% /dev
tmpfs 396M 5.6M 390M 2% /run
/dev/sda1 6.8G 1.4G 5.1G 22% /
tmpfs 2.0G 0 2.0G 0% /dev/shm
tmpfs 5.0M 0 5.0M 0% /run/lock
tmpfs 2.0G 0 2.0G 0% /sys/fs/cgroup
tmpfs 396M 0 396M 0% /run/user/0
15. 用resize2fs調整大小:
注意這裡的sda1和之前虛擬機里的sdb1
$ resize2fs /dev/sda1
resize2fs 1.43.4 (31-Jan-2017)
Filesystem at /dev/sda1 is mounted on /; on-line resizing required
old_desc_blocks = 1, new_desc_blocks = 8
The filesystem on /dev/sda1 is now 15591680 (4k) blocks long.
16. 調整大小完畢
參考
Expanding a Linux Partitionext4 broken file system on ubuntu 14.04.4推薦閱讀: