slide.adoc 7.54 KB
Newer Older
Kenichiro MATOHARA's avatar
Kenichiro MATOHARA committed
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
= Btrfsが壊れかけて困った話
Kenichiro Matohara(matoken) <maroken@kagolug.org>
:revnumber: 1.0
:revdate: 2022-02-05(Sat)
:revremark: LILO&東海道らぐオンラインミーティング 2022-02-05「{doctitle}」
:homepage: https://matoken.org/
:imagesdir: resources
:data-uri:
:example-caption: 例
:table-caption: 表
:figure-caption: 図
:backend: revealjs
:revealjs_theme: serif
:customcss: resources/my-css.css
:revealjs_slideNumber: c/t
:title-slide-transition: none
:icons: font
:revealjs_hash: true
:revealjs_center: true
:revealjs_autoPlayMedia: true
:revealjs_transition: false  
:revealjs_transitionSpeed: fast

== link:https://matoken.org[Kenichiro Matohara(matoken) https://matoken.org]

image::map.jpg[background, size=cover]

* 南隅から参加(鹿児島の右下)
* 好きなLinuxディストリビューションはDebian
* お仕事募集 mailto:work@matohara.org

== 最近

* 四十肩
* スマホバッテリーがそろそろ限界
** OCN/iijmio/mineoでセールやってるな……
** OCNの link:https://simseller.goo.ne.jp/category/ANDROID/NEWZRS00000000REDMI9T00.html[Redmi 9T 1円].link:https://www.ntt.com/personal/services/mobile/one/set/motog31.html[moto g31] MNP+オプションで1円
** link:https://androidenterprisepartners.withgoogle.com/devices/compare/#!/SnCWS4LHRrKVDzg4jjlk,CexKi8fXmJcY5nHSXECL[Android Enterprise Recommended]だしLineageOS対応してそうだし気になる

image:https://nitter.matoken.org/pic/media%2FFKLeUrTaIAUmxpk.jpg%3Fname%3Dsmall[width=15%]
image:https://nitter.matoken.org/pic/media%2FFKLeVJWakAIiv_n.jpg%3Fname%3Dsmall[width=15%]

== メインマシンの /(Btrfs) が壊れかけて困った

== 今回の環境

PC:: Lenovo ThinkPad T430s
CPU Intel(R) Core(TM) i5-3320M/RAM 16GB/SATA SSD(link:https://smarthdd.com/database/Seagate-BarraCuda-SSD-ZA1000CM10002/STAS1024/[Seagate BarraCuda SSD ZA1000CM10002], FwRev=STAS1024)
OS:: Debian sid amd64 + セルフビルドKernel 5.16.0
ファイルシステム:: dm-crypt + Btrfs (v5.15.1), snapperスナップショット有効,zstd透過圧縮On, `/` のみ  +
`rw,noatime,nodiratime,compress=zstd:3,ssd,space_cache,subvolid=5,subvol=/`
バックアップ:: デイリーバックアップ有り

== 序章

* 一部のアプリケーションが Segmentation Falt で落ちるように
* `apt upgrade` でいくつかのパッケージが依存関係で失敗したりしていたのでよく調べずに sid だしな,そのうち治るだろうと思っていた

== はじまり

* 再起動すると起動できなくなってしまう
* kernel 起動パラメータ `init=/bin/sh` 追加して起動してみると `shred librarie` が壊れているようで `file too short` とか言われる(0byte)
* 壊れたpkgを `apt install --reinstall` しようと思ったら apt もコケる

== とりあえずの復旧

* testing のインストーラで起動(レスキューモード)  +
link:https://www.debian.org/devel/debian-installer/[Debian -- Debian インストーラ]
* 壊れてそうな .deb を http://packages.debian.org/ から手動ダウンロードして `dpkg -i` を何度か繰り返してとりあえず `apt` コマンドを使えるように
* 壊れたライブラリを `apt install --reinstall` で起動するようになった

== 原因

* なんで壊れたんだろう? と `btrfs check` をかけてみる
大量のエラー……ファイルシステムがおかしそう?
* リモートにバックアップが取れていることを確認
** とりあえずほっとする
* 初期化してしまったほうがいいだろうけどあまり機会がないので復旧を試みる

== 復旧

* testing のインストーラで起動(レスキューモード)
* `btrfs check --repair` かけたらエラー増えて96711392行  +
そして途中でabort
* `btrfs check --repair --init-csum-tree` 40分ちょっとで正常終了
* `btrfs check` 駄目です
* `btrfs check --repair --init-extent-tree` 4日近くかかって abort  +
> failed to repair damaged filesystem, aborting
* `btrfs check --repair` && `btrfs check` で `no error found`

=== `btrfs check --repair` について

.link:https://btrfs.readthedocs.io/en/latest/btrfs-check.html[btrfs-check(8)]
____
Warning

Do not use --repair unless you are advised to do so by a developer or an experienced user, and then only after having accepted that no fsck successfully repair all types of filesystem corruption. Eg. some other software or hardware bugs can fatally damage a volume.
____


今回は幸い復旧できたけどいくつかのファイルは壊れていたし時間もかかるのでバックアップ重要

== Debianシステムの修復

* ファイルシステムは治ったようだけどシステムは壊れてそう
* debianの重要なパッケージ一覧を出して `apt install --reinstall`

----
$ dpkg-query -Wf '${Package;-40}${Essential}\n' | grep yes | cut -f1 -d\  | \
xargs deborphan -anp required --no-show-section | sed 's/^ *//g' | sort | uniq > essentialpkgs.list
$ cat essentialpkgs.list | xargs sudo apt install --reinstall
----

=== !

* 導入済みパッケージを導入し直す
* `~/.dpkg_--get-selections` はデイリーで実行している `dpkg --get-selections` の結果
----
$ grep $'\t'install$ ~/.dpkg_--get-selections | grep -v ^linux-image| awk '{print $1}' | xargs sudo apt install --reinstall
----

== データの確認

* $HOME , /etc をバックアップと比較して壊れているものを探す  +
`$ rsync -avcn $SOURCE $DIST`
* chacheくらいだった

== $HOME を / から分けてみる

* $HOME をサブボリュームに分けることにする(多少壊れにくくなる?)
----
# mv /mnt/home /mnt/home.org <.>
# btrfs subvolume create /mnt/home <.>
# mount -o noatime,nodiratime,compress=zstd:3,ssd,space_cache,subvol=/home /dev/mapper/t430s--vg-root /mnt/home <.>
# cp -a /mnt/home.org /mnt/home <.>
# nano /mnt/etc/fstab <.>
# grep /home /mnt/etc/fstab 
/dev/mapper/t430s--vg-root /home           btrfs   noatime,nodiratime,ssd,compress=zstd,space_cache,subvol=home 0       0
----

<.> $HOME 退避
<.> $HOME 用サブボリューム作成
<.> サブボリュームマウント
<.> サブボリュームに $HOME のデータをコピー
<.> /etc/fstab を修正して $HOME をマウントするようにする

== snapshotクリア

----
$ snapper  --csvout list | grep -v ^config, | cut -f3 -d, | xargs -n1 sudo snapper delete
----

btrfs df / btrfs du を比べると倍くらい違う?消えていないsnapshotが2つあったので手動で削除……大きく容量が空いた.

== snapshot設定

$HOMEもsnapshotを設定
----
$ sudo cp /etc/snapper/configs/root /etc/snapper/configs/home
$ sudo vi /etc/snapper/configs/home
----

== まとめ

* Btrfs便利な機能多くて助かるけどたまに壊れる(4度目)壊れると直せるかは?
* 今回は直せるかが気になったのでrepairを試みたけどなんやかんや1週間ほどかかった
* 時間もかかるし初期化するのが近道
* 一応治ったけどSecureErasesして再インストールかな?

Kenichiro MATOHARA's avatar
Kenichiro MATOHARA committed
170
171
バックアップだいじ

Kenichiro MATOHARA's avatar
Kenichiro MATOHARA committed
172
173
174
175
176
177
178
179
== 参考URL

* link:https://btrfs.readthedocs.io/en/latest/index.html[Welcome to BTRFS documentation! — BTRFS documentation]
* link:https://btrfs.readthedocs.io/en/latest/btrfs-check.html[btrfs-check(8)]

== 奥付

* 発表
Kenichiro MATOHARA's avatar
Kenichiro MATOHARA committed
180
** link:https://lilo.connpass.com/event/237592/[LILO&東海道らぐオンラインミーティング 2022-02-05]
Kenichiro MATOHARA's avatar
Kenichiro MATOHARA committed
181
182
183
184
185
186
* 発表者
** link:https://matoken.org/[Kenichiro Matohara(matoken)]
* 利用ソフトウェア
** link:https://github.com/asciidoctor/asciidoctor-reveal.js[Asciidoctor Reveal.js]
* ライセンス
** CC BY-NC-SA 4.0