mdadmのヤバそうなバグのCentOSにおける修正状況

はじめに

Ubuntu 16.04のmdadmには、所定の条件を満たすとユーザのデータをぶっ壊すという恐ろしいバグがあります。具体的には次の記事の"バグ1"のことです。

blog.cybozu.io

Ubuntuについては一応回避策もありますし、そのうち修正されるでしょうが、「そういえばこれ、CentOSではどうなってるんだろう」と気になったので、CentOS 6.9と7.4についてこのバグの有無を調べてみました。

調査結果

注意: これと同じことがCentOSのクローン元のRHELに当てはまるかどうかは知りません。気になる人はご自身で確認した上で対処してください。間違ってもRed Hat社に「このブログにCentOS 6.9のmdadmに問題があると書いてたからRHELのmdadmを直して」などと言わないようにしてください。Red Hat社にとってはCentOSにバグがあろうとなかろうと「知らんがな」なので。

調査ログ

このバグが存在するかどうかは実機確認すれば一発でわかるのですが、せっかくなのでソースからバグの有無を調査する手順を載っけときます。

CentOS 6.9

まずはソースパッケージのバージョンを次のサイトから調べました。

Index of /6.9/os/Source/SPackages

その中で次の行が見つかりました。

mdadm-3.3.4-8.el6.src.rpm

続いてこのソースrpmをダウンロード&インストールしてソース調査しました。このパッケージの元になっているのはファイル名からわかる通り、upstreamのバージョン3.3.4です。このバージョンは、この問題の修正がまだ適用されていないものです。

さて、これでアウトかと言うと違います。なぜかというと、CentOSなどのディストリビュータが提供するパッケージはupstreamのものにdistro固有のパッチがいくつか当たっていることがあり、それらパッチによって修正されている可能性があるからです。

mdadmのspecファイルを見ると、いくつか独自パッチが当たっていることがわかりました。

...
Patch1:      mdadm-3.3.4-imsm-don-t-call-abort_reshape-in-imsm_manage_reshape.patch
Patch2:      mdadm-3.3.4-Grow-close-file-descriptor-earlier-to-avoid-still-in.patch
Patch3:      mdadm-3.3.4-imsm-abort-reshape-if-sync_action-is-not-reshape.patch
Patch4:      mdadm-3.3.4-imsm-use-timeout-when-waiting-for-reshape-progress.patch
Patch5:      mdadm-3.3.4-imsm-don-t-update-migration-record-when-reshape-is-i.patch
Patch6:      mdadm-3.3.4-Grow-Add-documentation-to-abort_reshape-for-suspend_.patch
Patch7:      mdadm-3.3.4-super-intel-ensure-suspended-region-is-removed-when-.patch
Patch8:      mdadm-3.3.4-Grow-close-fd-earlier-to-avoid-cannot-get-excl-acces.patch
Patch9:      mdadm-3.3.4-Introduce-stat2kname-and-fd2kname.patch
Patch10:     mdadm-3.3.4-IMSM-retry-reading-sync_completed-during-reshape.patch
Patch11:     mdadm-3.3.4-The-sys_name-array-in-the-mdinfo-structure-is-20-byt.patch
Patch12:     mdadm-3.3.4-imsm-add-handling-of-sync_action-is-equal-to-idle.patch
Patch13:     mdadm-3.3.4-imsm-properly-handle-values-of-sync_completed.patch
Patch14:     mdadm-3.3.4-Incremental-don-t-try-to-load_container-for-a-subarr.patch
Patch15:     mdadm-3.3.4-Allow-level-migration-only-for-single-array-containe.patch
Patch16:     mdadm-3.3.4-imsm-set-generation-number-when-reading-superblock.patch

Patch97:     mdadm-3.3.2-disable-ddf.patch
Patch98:     mdadm-3.3.2-udev.patch
Patch99:     mdadm-3.3-makefile.patch
...

これらのパッチを全部当てた状態のソースを調査しても、バグは修正されていないことがわかりました。つまり、CentOS 6.9は結局アウト。

CentOS 7.4

6.9の場合と同様に、まずはソースパッケージのバージョンを確認しました。

Index of /7.4.1708/os/Source/SPackages

その結果、次のバージョンを使用していることがわかりました。

mdadm-4.0-5.el7.src.rpm

次はこのソースパッケージの調査です。ダウンロード&インストールすると、upstreamのmdadm 4.0がベースとなっていることがわかりました。このバージョンは、バグが修正されているものです。では、これでセーフ確定かというとそうではありません。CentOS固有パッチによってregressionを起こして、またバグが復活している可能性がわずかに残っています。このため、全パッチを適用した上でソース確認しました。確認の結果は問題なかったので、7.4はセーフ。

WSL on Windows 10 Fall Creators Updateの第一印象

Windows10をFall Creators Updateにバージョンアップしてみました。これに伴い、WSLが開発者用のツールではなく、公式アプリとしてMicrosoft Storeから手に入れられるようになりました。さらに、distributionがUbuntuだけでなくopenSUSE, SLESも選べるようになりました。

新版の変更点は次のページにまとまっています。

What’s new in WSL in Windows 10 Fall Creators Update – Windows Command Line Tools For Developers

過去のUbuntu on Windows、および今回追加された3つのディストリビューションアプリごとにデータを独立して持っているので、次のような手順で過去のものから新しいUbuntuにデータを移行しました。

What’s new in WSL in Windows 10 Fall Creators Update – Windows Command Line Tools For Developers

その他、ファイルシステムは過去のものとは異なるどこかに隠されているとMSの人は言っていますが…

What’s new in WSL in Windows 10 Fall Creators Update – Windows Command Line Tools For Developers

実際には<ユーザディレクトリ>/AppData/Local/Packages/<distroディレクトリ>/LocalState/rootfs/にあるとわかりました。findで検索したらすぐ見つかりました。

以前次の記事において取り扱った各種性能については、これから計測します。

Windows Subsystem for Linuxとguest/native Ubuntuの性能をざっくりと比較 - Qiita

次のイベントで結果を発表する予定です、乞うご期待。

connpass.com

WSLのファイルシステムイメージをデフォルト以外の場所に移動できるか

WSLのファイルシステムイメージはC:\Users\<ユーザ名>\AppData\Local\lxssという場所に配置されています。ちょっと理由があって、これを他のストレージ(たとえばDドライブ以下)に移動させたくなったので、できるかどうか調べてみました。結論は、「Fall Creators Updateの時点では(少なくとも公式には)できないらしい」でした。残念。次回以降のrelaseに期待です。

以下調査ログ

とりあえず既存issueの確認をしたところ、あっさりとみつけました。

moving Linux filesystem · Issue #449 · Microsoft/WSL · GitHub

けっこう需要があるのか、はたまた一部の人が熱烈に欲しいのか、スレッドは長いです。最新の情報のほうが多分価値が高いので、調べる時間を短縮するために、新しい末尾の投稿から古い方に順番に読んでいきました。すると、次のようなコメントをみてみました。

moving Linux filesystem · Issue #449 · Microsoft/WSL · GitHub

で、リンクをたどって中身を見ると…

New distros coming to Bash/WSL via Windows Store – Windows Command Line Tools For Developers

確かにMSの中の人のブログとして、次のようなことが書かれていました。

You can install your distros to secondary fixed drives (i.e. not C:!) [Update 2017-07-24: Alas, this didn't fit in the Fall Creators Update schedule; we're looking into this feature for a future release]

非公式なトリッキーな方法を使えばできるかもしれませんが、データがぶっ飛んだら困るので、これ以上深追いするのはやめました。

会社組織を離れて変わったこと

前職を辞めて半年くらい経ちましたので、どういうところが変わったのかを羅列してみました。技術的な話、および、何かのdisり話は無いです。

  • 燃え尽きたりはせず、大してやることは変わらなかった。相変わらずOSSに関する何かをごそごそやっている。結局こういうのが好きなんだなあということを再認識
  • コードを書くよりドキュメントを書いていることが多い。もしかすると実は後者の方が好きなのかもしれない
  • 生活リズムは変化無し。やたら早く起きて早く寝るおじいちゃんスタイル
  • 好きなときに好きな場所で、自分のペースで作業できるのは非常に楽。スーパー気分屋なので、とくにそう感じる
  • 曜日や祝日の感覚が無くなった。開発MLの流量やtwitterのTL上から知ることが多い

ありきたりですが、盛ってもしょうがないので、こんなところです。日々穏やかに過ごしております。

iOS上のssh/moshアプリ、BlinkでC-mショートカットが効かない問題の続き

以下記事の続きです。

satoru-takeuchi.hatenablog.com

githubの既存issueで「俺のところでも起きる」と報告したところ、諸々あってBlinkのauto-repeat設定を有効にしているとC-mが効かないことがわかりました。あとはauto-repeatを有効にした状態でも問題が起きないようになる修正を待ちます。

スライド公開先の変更

これまで情報発信のために作ったスライドはSlideShareにおいて公開してきました。

www.slideshare.net

しかしSlideShareが、なぜかスライドの再アップロード機能を無くしてしまいました。

www.linkedin.com

このままでは不便なので、すべてのスライドをSpeakerDeckに移動させました。今後作るスライドもこちらで公開する予定です。

Presentations by Satoru Takeuchi // Speaker Deck

linuxでRyzenの温度センサーを動くようにする

Ryzenには温度監視機能があるのですが、本記事執筆現在、linuxのいわゆるupstream kernel(最新版は4.13)ではドライバが無いのでこの機能が使えません。温度監視をしたければWindowsFreeBSDを使うしかないという悲しい状況です。sensorsコマンドを実行しても次の通り、温度に関する情報は得られません。

$ sensors
asus-isa-0000
Adapter: ISA adapter
cpu_fan:        0 RPM

$ 

しかし、まだupstreamにマージされていないパッチを適用すれば、この機能を使えます。

AMD Zen Temperature Monitoring On Linux Is Working With Hwmon-Next - Phoronix

今使っているカーネルに関連パッチをcherry-pickしてきてもいいのですが、とりあえず試してみるだけなので、手間を省いて次のように関連パッチが入ったbranch, hwmon-nextをそのままビルドします。

$ cd ~/src/linux
$ git remote add staging git://git.kernel.org/pub/scm/linux/kernel/git/groeck/linux-staging.git
$ git fetch staging
...
$ git checkout staging/hwmon-next
...
$ cp /boot/config-$(uname -r) .config
$ make olddefconfig
...
$ make menuconfig                    # SENSORS_K10TEMP(Device Drivers -> Hardware Monitoring support -> AMD Family 10h+ temperature sensor)を選択
...
$ make -j$(grep -c processor /proc/cpuinfo)
...
$ 

できたカーネル上でsensorsコマンドを実行してみましょう(インストールとリブートの手順は省いています)。

$ sensors
k10temp-pci-00c3
Adapter: PCI adapter
temp1:        +31.0°C  (high = +70.0°C)                  # 温度情報が出力されている

asus-isa-0000
Adapter: ISA adapter
cpu_fan:        0 RPM

$ 

うまく動いているようです。よかったよかった。後はupstream kernelにパッチがマージされるまで待ちです。残念ながら4.14のマージウィンドウは逃しているので4.15以降です。

ちなみに関連パッチは次の3つです。4.13に以下3つのパッチをcherry-pickした状態で温度情報が採取できていることを確認済です。

  • 398f86f hwmon: (k10temp) Add support for temperature offsets
  • 3b7317cc hwmon: (k10temp) Add support for family 17h
  • 12dbb1a hwmon: (k10temp) Move chip specific code into probe function