tl;dr;

Avago(Broadcom) のWebサイトからダウンロードできる MegaRAID Storage Manager (以下MSM)を使えば管理できる。

ネタ元:
http://ottoserver.com/pcserver1/wp/archives/931

2021/09/01 追記

この世代のカードはLSI Storage Authority (略称LSA)を使った方が良い模様。
しかし… MSMと違ってLSAはWebアプリになっていて、しかもものすごく使いにくい。

蛇足

PERC H740Pって何?

キャッシュ8GBとバッテリーを積んだRAIDカード。

普通の使い方

DELLのサーバーと組み合わせて使う。その場合は専用のサーバー管理ツールで管理できる。

一般のPCでは…

Dellのサーバー管理ツールをインストールすることができない(インストールすることはできるがうまく動かない)。少なくとも8時間くらい色々探し回ったができなかった。

ちなみに…

RAIDカードとかSATA増設カード、HBAなどのストレージ関連の拡張カードは、マザーボードとの相性がある。ダメなときは本当にダメ。PCI-eのスロットがあっていても起動してこないときはしてこない。

例えば、HP ProDesk 800 G2 SFF のPCI-E x16にこのカードを差すと全く起動しない。
GIGABYTE Z87X-UD3HはPCI-e x16の2番め、3番目どちらのスロットでも問題なく動作した。
正直、昔に比べると相性問題は少なくなっているように思える。

2022/12/05 追記。 X370 Gaming K4 でも認識した。しかも、BIOSセットアップ内にRAIDカードの設定が増える(まともに操作できないが)

どうでもいいことですが

PERC H310をITモード(非RAID、HBAモード)にしてもMSMは認識できる。したからと言っても特にメリットはないが。

20210724 ZFSシングルディスクのプールをミラーに変更する

前提

  • 以下の作業は root ユーザーでSSHした状態で行っている。
  • 追加するSSDは容量が同じだが、別のOSで使っていたものである。
  • FreeBSD 12.2-RELEASE-p6 df578562304(HEAD) TRUENAS

現状確認

追加するプールは kube である。実行前の状態を確認する。
追加するディスクは da2 として認識されている。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# ls /dev/da*
/dev/da0 /dev/da3 /dev/da4p2 /dev/da6p1
/dev/da0p1 /dev/da3p1 /dev/da5 /dev/da6p2
/dev/da0p2 /dev/da3p2 /dev/da5p1
/dev/da1 /dev/da4 /dev/da5p2
/dev/da2 /dev/da4p1 /dev/da6

# zpool iostat

NAME SIZE ALLOC FREE CKPOINT EXPANDSZ FRAG CAP DEDUP HEALTH ALTROOT
boot-pool 9.50G 6.89G 2.61G - - 15% 72% 1.00x ONLINE -
kube 222G 71.5G 151G - - 17% 32% 1.00x ONLINE /mnt
pool 10.9T 9.41T 1.47T - - 19% 86% 1.00x ONLINE /mnt

# zpool status kube
pool: kube
state: ONLINE
config:

NAME STATE READ WRITE CKSUM
kube ONLINE 0 0 0
da1 ONLINE 0 0 0

追加するディスクの準備

da2 が追加するディスクなので準備を行っていく。
今回は、ディスクをまるごとZFSプールに追加するのでパーティションは切らない。
ちなみに、この追加の仕方をすると gpart list をしたときにリストに表示されなくなる。

1
2
3
4
5
# gpart destroy -F /dev/da2
da2 destroyed

# gpart create -s gpt /dev/da2
da2 created

ZFSプールにディスクを追加してミラーに

1
2
3
4
# zpool attach kube /dev/da1 /dev/da2

/dev/da1 は既存のディスクのデバイス名
/dev/da2 は追加するディスクのデバイス名

前提

  • Hyper-V VM
  • Debian 10

手順

  • Hyper-V等でディスク容量を増やす部分については割愛(GUIでできるから)
  • ディスクの末尾にあるパーティション以外には適用できない

増量されたディスクを認識させる

fdisk -l /dev/sda を実行して、想定した容量が表示されていればこの項目はスキップしてよい。

1
2
3
4
sudo su -

# sda はディスクによって変更すること
echo 1 > /sys/block/sda/device/rescan

パーティション作り直し

作り直しといってもGPTのパーティション情報を作り直すだけ。(MBRでもおそらく同じ)

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
fdisk /dev/sda

# GPT PMBR size mismatch (67108863 != 73400319) will be corrected by write.
# The backup GPT table is not on the end of the device. This problem will be corrected by write.
# 上記のメッセージが表示されるが無視してよい

Command (m for help): p (情報表示)

Disk /dev/sda: 35 GiB, 37580963840 bytes, 73400320 sectors
Disk model: Virtual Disk
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disklabel type: gpt
Disk identifier: 202AC417-46EC-4192-AC0F-8EAFBD9326FA

Device Start End Sectors Size Type
/dev/sda1 2048 1050623 1048576 512M EFI System
/dev/sda2 1050624 67106815 66056192 31.5G Linux filesystem

Command (m for help): d (パーティション削除)
Partition number (1,2, default 2): (何も入力せずにENTER)

Partition 2 has been deleted.

Command (m for help): n (新しいパーティションを作成)
Partition number (2-128, default 2): (何も入力せずにENTER)
First sector (1050624-73400286, default 1050624): (何も入力せずにENTER)
Last sector, +/-sectors or +/-size{K,M,G,T,P} (1050624-73400286, default 73400286):

Created a new partition 2 of type 'Linux filesystem' and of size 34.5 GiB.
Partition #2 contains a ext4 signature.

Do you want to remove the signature? [Y]es/[N]o: n (EXT4のシグネチャを削除されると困るのでno)

Command (m for help): p

Disk /dev/sda: 35 GiB, 37580963840 bytes, 73400320 sectors
Disk model: Virtual Disk
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disklabel type: gpt
Disk identifier: 202AC417-46EC-4192-AC0F-8EAFBD9326FA

Device Start End Sectors Size Type
/dev/sda1 2048 1050623 1048576 512M EFI System
/dev/sda2 1050624 73400286 72349663 34.5G Linux filesystem
# ^^^^^^^^ ^^^^^ 変更部分

Command (m for help): w (書き込み)
The partition table has been altered.
Calling ioctl() to re-read partition table.
Syncing disks.

ファイルシステムの拡張

まだEXT4のファイルシステムのサイズは拡張されていないので拡張する

1
resize2fs /dev/sda2

まえがき

なんとなく、サーバー用にRAIDカードが欲しくて調べた。
PERC 4世代より前は調べていません。
PERC 5〜6 まではそのままの名前+eとかiとか(内蔵・外付けの区分)
6世代以降は、PERC aXYZ というネーミングのようだ。
a = H: ハードウェアRAID S:ソフトウェアRAID
X = 2,3: 内蔵ドライブ用キャッシュなし 7:内蔵ドライブ用キャッシュあり 8:外付けエンクロージャ接続用
Z = 0: PCI-eカード型 / 5:その他

ソフトウェアRAIDは単独の部品として出てこないので扱わない。
PCI-Expressのカード型ではないものも流用できないので扱わない(PERC Hxxx MX等)

H3xx 系列は RAID0,1,10のみ。RAID5,6は設定できるがパフォーマンスが低下する。

リスト

世代 名前 キャッシュ PC I/F 登場年 備考
11 PERC H755 8GB PCIe 4.0 x8 2020
10 PERC H740P 8GB PCIe 3.0 x8 2018 Pなしは存在しない模様。ebay価格5万円程度
10 PERC H345 なし PCIe 3.0 x8 2018
9 PERC H730 2GB, 1GB PCIe 3.0 x8 2014 2GBモデルは H730P。730Pで2万円程度
9 PERC H330 なし PCIe 3.0 x8 2014
8 PERC H710 1GB, 512MB PCIe 2.0 x8 2012 1GBモデルは H710P。710Pで1万円程度
8 PERC H310 なし PCIe 2.0 x8 2012 ファームウェア書き換えでHBAとして使われることでお馴染み
7 PERC H700 512 MB PCIe 2.0 x8 2010
7 PERC H200 なし PCIe 2.0 x8 2010
6 PERC 6 512 MB、256 MB PCIe 1.0 x8 2008 *1 *2 512MBは /E(外付け)のみ
5 PERC 5 256MB PCIe 1.0 x8 2005 *1 *2

*1 5,6世代は2TB以上のディスク扱えない。
*2 SAS/SATA 3Gbps

ESXi 7.0 対応は9世代以降
10世代はバリエーションが多く調べきれていない

ざっくり中古価格

PERC H740P 30000円 (ebay価格)

元ネタ

https://www.dell.com/support/kbdoc/ja-jp/000131648/dell-emc-%E3%82%B7%E3%82%B9%E3%83%86%E3%83%A0%E3%81%AE-poweredge-raid-%E3%82%B3%E3%83%B3%E3%83%88%E3%83%AD%E3%83%BC%E3%83%A9-perc-%E3%82%BF%E3%82%A4%E3%83%97%E3%81%AE%E3%83%AA%E3%82%B9%E3%83%88

https://en.wikipedia.org/wiki/Dell_PERC#Series_5_family
https://en.wikipedia.org/wiki/List_of_Dell_PowerEdge_Servers

環境

  • PostgreSQL 13.3
  • kubernetes上で動作している
  • ストレージは iSCSI

現状確認

スロークエリログ

PostgreSQLはデフォルトではスロークエリログを出力しないので、出力するように設定する。
ただ、スロークエリログにはSQLクエリとその時使用されたパラメタまで出力されるので、機密情報が出力される可能性もある。

以下のSQLを実行してPostgreSQLを再起動すれば反映される。

1
alter system set log_min_duration_statement = '500';

出力例

1
2
2021-08-11 10:36:48.598 UTC [19772] LOG:  duration: 1522.809 ms  execute <unnamed>: SELECT 1 AS one FROM "tablenames" WHERE "uri" = $1 LIMIT $2             
2021-08-11 10:36:48.598 UTC [19772] DETAIL: parameters: $1 = 'some parameter', $2 = '1'

メモリ関係の設定パラメタの確認

メモリ関連の設定値がPGTune(または自分でチューンした値)になっているか確認。
バージョンアップ後(dockerとか使ってると特に)に初期値に戻っていることが多いので要注意。
※ dockerを使っている場合、メジャーバージョンアップは pg_dump -> importするのが手っ取り早い場合が多いため。(1敗)

1
2
3
4
5
6
7
8
9
10
11
12
SHOW max_connections;
SHOW shared_buffers;
SHOW effective_cache_size;
SHOW maintenance_work_mem;
SHOW checkpoint_completion_target;
SHOW wal_buffers;
SHOW default_statistics_target;
SHOW random_page_cost;
SHOW effective_io_concurrency;
SHOW work_mem;
SHOW min_wal_size;
SHOW max_wal_size;

結局

アプリケーション(Mastodon)の性質から、万が一のデータ損失は許されると判断して、同期コミット(コミットがディスクに書き終わったら完了を返す)をOFFにした。ようするにコミットしたという事実がディスク書き込まれる前にコミットが完了したことになるので見かけ上のパフォーマンスがよくなる。
デメリットは、コミット直後にDBが落ちるとそのコミットが失われる可能性があるということらしい。データが破損する。とかではなくてトランザクションがまるごと無効になるだけなのでまぁOKかなと。

1
alter system set synchronous_commit = 'off';

振り返り

  • スロークエリのログは普段から出していないと、ログが出てもそれがいつも出ているのか、それとも遅いと感じたタイミングから出始めたのかがわからない。

蛇足

  • やはりスローログが出ているのはあまり気持ちの良いものではないので、RAIDカードを導入してI/Oを強化したところ、スローログの出力はピタリとやんで、快適な環境に戻った。

まえがき

半分は自分用メモである。
そして、2021/08/11現在は Arch Linuxに移行しているのでそれに合わせて加筆修正を行っている。

ターミナル

Guake (使用中)

ホットキーを押すとターミナルが出てくる。

Quake とか Minecraft のターミナルウィンドウみたいな感じ。

テーマで Aci を選択、 F1 で起動するように設定

Konsole

KDE標準のターミナル。
なんだかんだで透明度も設定できるしそれほど重くないし… 何より慣れているのでそのまま使っている。

  • フォント 源の角ゴシック Code JP R 12pt
  • 透明度 20%くらい

GNOME 端末

Guake の中身もこれ。

  • iTerm の色設定を入れて
  • フォント 源の角ゴシック Code JP R 12pt
  • 透明度 20%くらい
  • Guake に限り、Gtk テーマ Mint-Y-Dark-Red を指定

開発用

Jetbrains toolbox

tar.gz 形式。IntelliJ とか DataGrip を入れて管理してもらうためのツール。

AppImage だけれども、このツールに日本語を入れることというか入力するようなツールではないので OK

VSCode

公式から deb 形式で。 セッティング同期、実装されないかなぁ
プラグインにあるけど、本体に実装されるとかなんとか。
→ VSCode insider 版には設定の同期があるので、Insider 版を入れている。

→公式でも設定の同期がされるようになりました。
アイコンの色が違う程度なので普通に使える。

個人的な好みだけど、Chrome とか Edge みたいに DEV とか Canary みたいな文字がアイコンに入ると常用できないので、VSCode、Firefox 的なアイコンの色が違うとかそういうのが好み

docker

docker.io 版を入れている。

VM

Windows はどうしても動かさざるをえないときがあるので入れる。

KVM を使えばよい気もするが…

VMware workstation Player

モジュールのコンパイルに失敗する場合、以下を参照。

https://ubuntu-mate.community/t/20-04-vmware-workstation-player-fails-to-build-kernel-modules-vmmon-vmnet/21176

Oracle VM Virtualbox

Manager の表示が乱れて設定がまともにできない。

つらつらのつらみ。

SNS とか周り

Biscuit (使用中)

Arch Linuxだとaurからインストール可能なのでインストールした。
動作も問題なくなった。

Rambox

SNS まとめるブラウザ。

Twitter はブラウザで見てる。(Chromium 系だと入力がおかしい)

→ 妙に重いので諦めて Vivaldi にピン止めして使っている

Slack

deb 形式でインストール。 まぁ必要だよね

クラウドストレージ同期

Dropbox

公式クライアント (使用中)

公式でLinuxがサポートされている

OneDrive

#1 Free OneDrive Client for Linux

https://github.com/abraunegg/onedrive/

cliのプログラム。

https://github.com/DanielBorgesOliveira/onedrive_tray
GUI通知は上記を使うと実現できる(onedrive_trayがonedrive cliを呼び出してくれる)
1年くらい使った限りでは全く問題なかった。

Google Drive

Open Drive (ODrive)

Google Drive と同期するためのツール。
本当は同期する場所を選べるといいんだけど、まぁ全部同期しちゃってる。
→ Sync ボタンを押したときしか同期しない?なんか動作がよくわからないので削除した

google-drive-ocaml-fuse

fuse なのであんまりかなぁと思って避けていた。
入れてみると、Google Drive がデバイスとして見えてこれはこれでとてもアリ。
→ と思ったが、ローカルにファイルがないのはいろいろと不便なので乗り換え

overGrive

https://www.thefanclub.co.za/overgrive $5 の有料ソフトウェア。

いろいろと頑張るよりちょっとお金を払うほうが早いという結論に。
→ 作者のArch aurに対する言動がアレなので使用停止した。

ランチャー

albert

有名どころ。

ulauncher

<https://ulauncher.io/

albert より Extension がおおい

その他

Remmina

RDP / VNC クライアント。 とりあえずいい感じだったのでこれにした。

Font Manager

TTC 形式のフォントをインストールするために入れた。

標準だと TTC 形式が扱えないので。

DeaDBeeF

公式ページ https://deadbeef.sourceforge.io/

マルチプラットフォーム音楽プレイヤー。正直、foobar2000 ぽい。

初回起動時は Gtk2 になってるので、なんじゃこりゃ?!っていう表示だが Gtk3 にして再起動すると普通になる。

ReplayGain Scanner が入ってるのがとても良い。

入れたプラグイン

  • GNOME multimedia keys support
  • MPRISv2 plugin D-Bus 対応。タスクトレイの ♪ アイコンに曲情報が出る
  • Musical Spectrum とてもきれいなスペアナ
  • VU Meter VU メーター。そのまま。

LinuxBrew

macOS で言うところの HomeBrew の Linux 版。

  • kubectl (kubernetes 管理ツール)
  • k9s(kubernetes 管理用ツール)
  • docker-compose

を入れるのに使っている。

環境

  • Ceph mimic

何がしたかったのか

CephFS は Ceph クラスタにひとつしか作れない(複数ファイルシステムはまだ experimental)にも関わらず

複数作りそうな名前で作ってしまったので、名前を変えたかった。cephfs のリネーム機能はなさそうなので、作り直しをすることにした。

手順

以下のコマンドで可能です。MDS が複数いる場合は、全部 fail させる必要があります。

1
ceph mds fail 0; ceph fs rm <cephfsname> --yes-i-really-mean-it

全部やり直したければ、cephfs に紐付く pool も削除して下さい。

なお、MDS は、CephFS 専用なので、データの損失は発生しません。(CephFS 内のデータは消えますが)

背景

単純に、 ceph fs rm <cephfsname> とやってしまうと

1
Error EINVAL: all MDS daemons must be inactive before removing filesystem

と怒られます。ググってみると、 ceph mds stop だとか service ceph mds stop とか出てくるのですが、

1
Error ENOTSUP: command is obsolete; please check usage and/or man page

ということで obsolete らしいです。何も起きません。

では、止めずに削除すればよいのかと ceph mds rm 0 と実行してみても、削除されるような表示はされますが、削除されません。多分、最後のひとつなので削除できないのだろうと思われます。

では、どうやったら CephFS を消せるのかとググりまくった結果たどり着いたのが上のコマンドです。

わざわざ、 ceph mds fail -> ceph fs rm とつなげて書いているのは、MDS が fail すると、通常はは MDS が 0 個になってしまうので、自動的に MDS が再起動されるようです(動作からの推測)。MDS が再起動されると all MDS daemon is inactive ではなくなってしまうので、エラーになる。

では、再起動される前に cephfs を削除してしまえば。。。ということで成功したという所です。

本当はもう少し良いやり方があるのではないかと思うのですが、とりあえず可能だったので OK とします。

動機

なんとなく、Raspberry Pi が起動したときに音を鳴らしたいなと思って、圧電ブザーを付けたら
ビープ音で音楽を鳴らしてみたくなったので実装してみた。
※実際の所は Python に慣れたかったから書いただけです。。

参考にした所

圧電スピーカー(余興) | Feijoa.jp

http://www.feijoa.jp/laboratory/raspberrypi/speaker/

ここのプログラムをベースにしました。セットアップ方法等はこちらをご参照下さい。

ソース

https://github.com/yakumo-saki/raspberrypi-beep

こちらで公開しています。

使い方1 (シンプル)

python beep.py 750 100

750hz で 100ms ビープ音を鳴らします。

使い方 2 (beep 互換)

python beep.py -f 750 -l 100 -n -f 300 -l 100

オプションと値がくっついている形式はサポートしません。スペースで区切って下さい。

サポートしているつもりのオプションは以下の通り。

  • -f (周波数 hz) 省略可。省略時は 200hz
  • -l (長さ ms)。 省略時は 100ms
  • -n -new 複数の beep 音を指定する際のデリミタ
  • -d -D (長さ ms) 無音を再生します
  • -r (繰り返し回数) 最初から、もしくは前回の -r 以降を指定回数繰り返します

ご注意&TIPS

root 権限が必要です。
beep を連打して実行するような形式の場合、プログラム自体が多少時間がかかるため、
音に隙間が空いてしまうのでご注意下さい。
以下のように実行すると、隙間が空いてしまいます。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
python beep.py -f 300 -l 100
python beep.py -f 400 -l 100
python beep.py -f 500 -l 100

# これならOK
python beep.py -f 300 -l 100 -n -f 400 -l 100 -n -f 500 -l 100

# シェルスクリプトに書くなら以下のようなのがよろしいかと
# 1行につなげて書いてももちろんOKですが、行が長すぎるとvimが重くなったりします。
python ./beep.py \
-f 100 -l 53 -d 53 \
-n -f 150 -l 53 -d 53 \
-n -f 130 -l 53 -d 53 \
-n -f 200 -l 200 \
-n -f 220 -l 200

beep 音楽

以下の通り。ここの beep 音楽は大体再生できます。(なんか一部おかしいのもありますが)

Swiper って?

Web ページをスワイプ対応にするライブラリ。

http://www.idangero.us/swiper/

この記事は、Swiper 3.1.2 で動作確認した。

Ver 3 未満の場合は別の方法が必要。

問題

IE 11 / Edge で、スワイプエリア内のセレクトボックスが選択できなくなる。

具体的には、ドロップダウンは表示されるが、選択できない状態になる。

解決策

SELECT タグに、 class="swiper-no-swiping" を追加する。

たったこれだけ。

前提として知っておくべき知識

  • kubernetes のマイナーバージョンを飛ばしたアップグレードは不可能
  • マスターとワーカーのノードのマイナーバージョンは 0.1 違いまで許される
  • なので、1.16 -> 1.17 、1.17 -> 1.18 と 2 回のバージョンアップが必要

1.16 -> 1.17

準備

以下の問題にひっかかるので、 マスターノードの、 /var/lib/kubelet/config.yaml に以下の二行を追加

1
2
featureGates:
CSIMigration: false

実際のバージョンアップ

1.16 から 1.17.x にバージョンアップ。

マスター

1
2
3
4
5
6
7
$ sudo apt-mark unhold kubeadm kubelet kubectl
$ sudo apt update
$ sudo apt install kubeadm=1.17.4-00 kubelet=1.17.4-00 kubectl=1.17.4-00
$ sudo kubeadm upgrade plan
(upgradeしてよいという表示がでるかチェック)

$ sudo kubeadm upgrade apply v1.17.4

ワーカー

以下を 1 台ずつ、全台に対して行う

1
2
3
4
5
6
7
8
9
10
$ kubectl drain <workername> --ignore-daemonsets --delete-local-data
※ metrics-serverがひっかかるので、delete-local-dataを付けている。
※ 当方の環境はデータは全てNFSなので問題無いが、セットアップによってはマズいかもしれない

$ sudo apt-mark unhold kubelet kubectl kubeadm
$ sudo apt update
$ sudo apt install kubelet=1.17.4-00 kubectl=1.17.4-00 kubeadm=1.17.4-00

$ kubectl uncordon <workername>

1.17 -> 1.18 へのバージョンアップ

ここまでの手順を 1.17.4 -> 1.18.1 (執筆時点)に変更して、再度実行する。