Closed9

/bootが逼迫した時のメモ

ピン留めされたアイテム
enchanenchan

Overview

おうちサーバ (ubuntu-server @setsuna.local) の apt update に失敗したので調べたところ、なんと /bootの使用量が100%になっていた

事態発生時の /boot の割り当ては300MB、ただし昨今のLinuxでは1~2GB程度あったほうがよいらしい[1]

ちょっと調べると「古いカーネルを消せ」と言われるが、現在のカーネルと更新後のカーネルを同時に同じFS上に展開できないような状況なので土台無理な話

なんとかして対応したので、対応録をほぼそのまま残しておく

以下、メモ書き

脚注
  1. https://serverfault.com/questions/334663/what-is-the-recommended-size-for-a-linux-boot-partition/1029458#1029458 ↩︎

ピン留めされたアイテム
enchanenchan

まとめ

行った操作としてはこんな感じ。

1
2
3

fstab作り直した方がいいのかなと思ったんですけど特段問題なく動いている なんでかはわからん

enchanenchan

発端

やばいやばい/bootが逼迫してやがる

拡張したいんだが、その直後に/がいるもんでやりようがない!
これどうしたらいいんだろう sda3を縮小+移動できないだろうか

とりあえず現状:

Device         Start       End   Sectors   Size Type
/dev/sda1       2048   2203647   2201600     1G EFI System          /boot/efi
/dev/sda2    2203648   2818047    614400   300M Linux filesystem    /boot
/dev/sda3    2818048 271253503 268435456   128G Linux filesystem    /
/dev/sda4  271253504 539688959 268435456   128G Linux filesystem    /usr
/dev/sda5  539688960 976771071 437082112 208.4G Linux filesystem    /home

/bootをもう4GBくらいにしちゃいたいんだよな
4GiB = 4294967296Byte = 8388608セクタ だから、2203648 ~ 10592255 まで拡充できればよくて…

enchanenchan

sda3(/)縮小

直下のsda3の開始が2818048だから、10592256 - 2818048 = 7774208セクタ縮めないといけない
つまり?268435456セクタあったsda3を、268435456-7774209=260661247セクタに縮小する必要がある、と

とりあえずsda3を最小まで縮小しよう

# df -h /host
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda3       125G   11G  109G   9% /host

11GB使ってるらしいから、16GiB=17179869184Byte=33554432セクタまで縮める

# e2fsck -f /dev/sda3
# resize2fs /dev/sda3 33554432s

次にパーティションを縮小する
このとき、パーティション長はファイルシステム長より大きくないと(多分)困るので、適当に32GBまで縮める

fdisk /dev/sda
d 3
n 3
+32G
w

これでパーティションが32GiB=34359738368Byteまで縮小された

e2fsck -f /dev/sda3
resize2fs /dev/sda3

これでFSをパーティションの最大サイズまで拡張する 一旦再起動

enchanenchan

sda6を生やし、sda3の内容をコピー

現状:

# fdisk -l /dev/sda
Device         Start       End   Sectors   Size Type
/dev/sda1       2048   2203647   2201600     1G EFI System
/dev/sda2    2203648   2818047    614400   300M Linux filesystem
/dev/sda3    2818048  69926911  67108864    32G Linux filesystem
/dev/sda4  271253504 539688959 268435456   128G Linux filesystem
/dev/sda5  539688960 976771071 437082112 208.4G Linux filesystem

これでsda3とsda4の間に空白(271253504-69926911 = 201326593セクタ = およそ96GB)ができた

次にsda3をその末尾までずらす つまり 69926911 ~ 137035776 へ移動する
昔はpartedでこれができたらしいんですが、今は無理らしいので…

パーティションを新しく生やして:

fdisk /dev/sda
n
6
69926912
+67108863
w

ddでコピー

dd if=/dev/sda3 of=/dev/sda6 bs=16M

これでsda3とsda6の内容が同一になった…はず

つぎにsda3を消す この辺りから後戻りできなくなってくる!

fdisk /dev/sda
d
3
w
enchanenchan

sda2(/boot)拡大

そしてsda2を拡大する

parted /dev/sda
resizepart 2 10592255s

FSも拡大する

e2fsck -f /dev/sda2
resize2fs /dev/sda2

こうすると:

The filesystem on /dev/sda2 is now 1048576 (4k) blocks long.

1048576*4096 = 4294967296Byte = 4GiB!想定通り

enchanenchan

sda3再作成

最後にsda6の内容をsda2直下に移す

まずsda3を作り直す

fdisk /dev/sda
n
3
10592256
69926911

こうするとsda2の末尾~sda6の先頭の位置にsda3が再作成される

Device         Start       End   Sectors   Size Type
/dev/sda1       2048   2203647   2201600     1G EFI System
/dev/sda2    2203648  10592255   8388608     4G Linux filesystem
/dev/sda3   10592256  69926911  59334656  28.3G Linux filesystem
/dev/sda4  271253504 539688959 268435456   128G Linux filesystem
/dev/sda5  539688960 976771071 437082112 208.4G Linux filesystem
/dev/sda6   69926912 137035775  67108864    32G Linux filesystem

ただしsda3の容量はsda6のそれよりも小さくなってしまうので、sda6のFSを16GBまで縮める
ここ最初からsda6をsda4にもっと近づけておけばよかった

e2fsck -f /dev/sda6
resize2fs /dev/sda6 16G 

次にsda6のパーティションサイズを20GBまで落とす 20GiB = 21474836480Byte = 41943040セクタ
sda6の開始位置は69926912だから、69926912 + 41943040 = 111869952セクタ まで縮めればいい

parted /dev/sda
resizepart 6 111869952s

fsを最大まで拡大する

e2fsck -f /dev/sda6
resize2fs /dev/sda6

すると:

The filesystem on /dev/sda6 is now 5242880 (4k) blocks long.

5242880 * 4096 = 21474836480Byte = 20GB

良さそう

enchanenchan

sda6をsda3にコピー、FS拡大

最後!改めて整理しよう

今こう:

Device         Start       End   Sectors   Size Type
/dev/sda1       2048   2203647   2201600     1G EFI System
/dev/sda2    2203648  10592255   8388608     4G Linux filesystem
/dev/sda3   10592256  69926911  59334656  28.3G Linux filesystem
/dev/sda4  271253504 539688959 268435456   128G Linux filesystem
/dev/sda5  539688960 976771071 437082112 208.4G Linux filesystem
/dev/sda6   69926912 111869952  41943041    20G Linux filesystem

sda6に本物が入っているんで、これをsda3にコピーすればいい

dd if=/dev/sda6 of=/dev/sda3 bs=16M

多分大丈夫、じゃあsda6を消そう

fdisk /dev/sda
d
6
w

さらにsda3を拡大

parted /dev/sda
resizepart 3 271253503s

FSを修正

e2fsck -f /dev/sda3
resize2fs /dev/sda3
enchanenchan

解決

いけた!!

Device         Start       End   Sectors   Size Type
/dev/sda1       2048   2203647   2201600     1G EFI System
/dev/sda2    2203648  10592255   8388608     4G Linux filesystem
/dev/sda3   10592256 271253503 260661248 124.3G Linux filesystem
/dev/sda4  271253504 539688959 268435456   128G Linux filesystem
/dev/sda5  539688960 976771071 437082112 208.4G Linux filesystem

/boot は?

% df
Filesystem     1K-blocks     Used Available Use% Mounted on
...
/dev/sda2        3971616   264360   3481160   8% /boot
...

逼迫してなさそうですね!

apt update
apt upgrade

通る!

 % uname -a
Linux setsuna 5.15.0-105-generic #115-Ubuntu SMP Mon Apr 15 09:52:04 UTC 2024 x86_64 x86_64 x86_64 GNU/Linux

おっけーー!!!あーーあぶねえあぶねえ

このスクラップは14日前にクローズされました