QEMUの仮想マシンのディスク領域を拡大する

はじめに

開発環境の一部を仮想マシンの Linux デスクトップで運用しています。Virt Manager で GUI で管理しているもので、中身は QEMU の VM イメージです。使っているうちに最初に確保したディスクサイズでは足りなくなってきたので拡大しました。

仮想マシンのディスク領域拡大

最初に仮想マシンを作って OS をインストールするときに LVM にしていたなら、後から仮想ディスクを追加して LVM ボリュームに追加するだけで良かったのですが、この仮想マシンは LVM にはしていませんでした。

そこで、仮想ディスクのまま拡大する方法を調べたところ、libvirt には便利なツールが揃っていて、思っていたよりも簡単にディスク領域を拡大できることが分かりました。ある意味、仮想ディスク追加→LVMボリュームに追加→resize2fsの手順よりも簡単です。

手順の概要は以下の通りです。

  1. 新しいサイズの仮想ディスクを作成
  2. virt-resizeコマンドで元の仮想ディスクの内容を新しい仮想ディスクへコピー

qemu-img resize してから仮想ディスクを仮にマウントして resize2fs する方法もありますが、virt-resize コマンドを使う方が簡単です。

まず対象仮想ディスクのパーティション構成を確認します。全体として20GBのディスクで、ルートパーティションが12GBであることが分かります。

# virt-filesystems --long --parts --blkdevs -h -a debian10.qcow2
Name       Type       MBR  Size  Parent
/dev/sda1  partition  83   12G   /dev/sda
/dev/sda2  partition  05   1.0K  /dev/sda
/dev/sda5  partition  82   8.0G  /dev/sda
/dev/sda   device     -    20G   -

新しく40GBの仮想ディスクを作成します。

# qemu-img create -f qcow2 -o preallocation=metadata debian10.20230425.qcow2 40G

元のディスクの内容を、新しいディスクにコピーします。この際に、拡張するパーティションとしてルートパーティションを指定します。

virt-resize --expand /dev/sda1 debian10.qcow2 debian10.20230425.qcow2

コピーが完了したら、新しい仮想ディスクのパーティション構成を確認します。
全体として40GB、ルートパーティションが32GBに増えたことが分かります。

# virt-filesystems --long --parts --blkdevs -h -a debian10.20230425.qcow2
Name       Type       MBR  Size  Parent
/dev/sda1  partition  83   32G   /dev/sda
/dev/sda2  partition  05   1.0K  /dev/sda
/dev/sda5  partition  82   8.0G  /dev/sda
/dev/sda   device     -    40G   -

最後にファイル名を付け直して Virt Manager から起動すれば、ディスクサイズが拡大された状態で仮想マシンを起動できます。

# mv debian10.qcow2 debian10.qcow2.bak
# mv debian10.20230425.qcow2 debian10.qcow2

【タイパ】コンテンツが溢れる時代の救世主?

タイパとは…🤔

みなさんは「タイパ」をご存知ですか?

「タイパ」とは「タイムパフォーマンス」の略語です。

かけた時間に対する効果、すなわち「時間対効果」のことである。かけた費用に対する効果(費用対効果)を意味する「コストパフォーマンス」の「コスト」を「タイム」(時間)に置き換えた造語で、和製英語。

Wikipedia – タイムパフォーマンス

ということみたいです。

タイパが「いい」と「悪い」⏱

「タイパ」は、Z世代を中心とした若者の間で流行している価値観になります。

YouTubeのショート動画やInstagramのストーリーズなど、空いた時間で手軽に情報を取り入れる手段が増え、自分が欲しい情報を簡単に集める事ができるので、かけた時間に対して高いパフォーマンスを得られることが流行の要因といえます。

反対に、長時間の映画などは「タイパが悪い」動画といえます🙅‍♀️
そんなタイパが悪い動画を解決するのが、動画の倍速再生機能になります。
この機能を使えば、1.5倍や2倍などの再生スピードで動画を視聴することができるので、「タイパの悪い」長尺動画を「タイパのいい」動画に変えることができます。

YouTubeをはじめ、様々な動画配信サービスには倍速再生機能がついており、「0.25〜2倍」ぐらいまで再生速度の調整できるようになっています。
ニュースや少し長い動画、ちょっと気になっていたドラマのあらすじをササッと見る際などに再生スピードを上げて視聴ことで、視聴時間を短くして少ない時間で効率良く動画を視聴しています。

逆に英語の発音やスポーツの得点シーンなど、ゆっくり再生してしっかりと確認したい場合は再生スピードを下げて視聴することもできます。

倍速再生が可能な動画配信サービス一覧

現時点で、倍速再生が可能な動画配信サービスは以下になります。(2023/04/25時点)

サービス名 倍速対応
YouTube
Netflix
Amazonプライムビデオ ×
Disney+ ×
U-NEXT
ABEMA
dTV
dアニメ
Hulu
TVer
Paravi
FOD
DAZN ×

一部サービスではテレビ視聴時未対応

倍速未対応のサービスで倍速再生をする方法⏯

ブラウザ拡張の「Video Speed Controller」を使うと、倍速再生に未対応のサービスで倍速再生ができるようになります。
ブラウザの拡張機能を利用するので、PC視聴限定となりますが非常に便利な拡張機能となっています。

【インストール方法】
以下の手順でインストールします。
Video Speed Controllerをインストール後、特に設定をしなくてもすぐに使うことができます。

  1. ChromeウェブストアからVideo Speed Controllerを追加する
  2. 動画再生画面を開く
  3. 再生画面の左上にコントローラーが表示されるので、そこから再生スピードを変更する

    左から順に、
    ・再生スピード
    ・10秒巻き戻し
    ・再生速度を下げる(-0.1倍)
    ・再生速度を上げる(+0.1倍)
    ・10秒早送り
    ・コントローラーを非表示
    となっています。

便利なショートカットキー🛠
以下のショートカットキーを利用すると、マウスで毎回ポチポチ操作せずとも再生スピードを操作することができます。
覚えると大変便利なのでぜひ使ってみてください。

ショートカットキー 操作内容
V コントローラーの表示・非表示
S 再生速度を下げる(-0.1倍)
D 再生速度を上げる(+0.1倍)
Z 10秒巻き戻し
X 10秒早送り
R 再生速度のリセット

なんだかんだ言って、使い分けることが大切…

散々「タイパ、タイパ」と連呼してしまいましたが、私は長編の映画などはゆっくり観たい派なので全ての動画を倍速再生しているわけではありません。笑
用途によって「タイパ」は使い分けていくことが大切だと思っています🥹

様々なコンテンツが溢れている現代ですが、より多くのコンテンツを楽しむために「タイパ」を日常に少し取り入れてみてはいかがでしょうか。

ふるさと納税で食べたいちごがおいしかった話

ふるさと納税——それは各地域のおいしいものが食べられる魅力的な仕組み。

 

というのは本来副次的なものですが、
ふるさと納税サイトでは返礼品を注文しているという感覚なので、
そしてそれを狙っているようにも感じるので間違いではないはず。

 

ふるさと納税を扱うサイトで返礼品を眺めているときに、
ふと、古都華といういちごがおいしいと聞いたことがあったのを思い出し、
古都華で検索してみるとおいしそうないちごだったので早速納税。

待つこと数日、古都華と書かれたきれいな箱が届きました。

箱の中身は、見るからに高そうなっゃっゃのいちごが、
大きいサイズと小さいサイズに分かれて2つのパックに入っていました。

味は、本当においしかったです。
いちごの味でした。

我ながら酷い語彙力なので「食レポ コツ」で検索してみましたが、
やっぱり、ただただおいしかったとしか言えません。
酸味と甘味がしっかりとあって、「いちごの味」というのを純粋に突き詰めた味。

 

実は、過去に古都華と書かれたいちごを食べたことがあって、
そのときは普通のイチゴとしか感じなかったように思います。

おいしいには違いなかったのですが、
化粧箱に入っているようなことはなくごく普通に売られていて
味も全然違ったような気がします。

そのとき食べたのは、実は古都華ではなかったりしたのかもしれませんが、
名産品はその地域外で食べると無難な味がしたりして、
あれ?ってなるのと似たようなものかとも思ったり。

また食べたいと思えるいちごでした。
気になった方は早速納税です。

ごちそうさまでした。

英語の面白い慣用句

こんにちは。開発担当のマットです。
オーストラリア生まれ育ちですが、人生の半分ぐらいは日本に住んでいます。

日本に来た時、日本語を必死に勉強しましたが、どれほど単語や文法を覚えても慣用句は完全に別物です。
「猫」も「小判」も単語として知ってても、いきなり「猫に小判」を聞くと・・・はぁ?となりますね。同じく、英語には多くの慣用句やことわざがありますので、この記事でいくつか面白いものを紹介したいと思います。

最近、AIの画像生成も楽しくやっていますので、それぞれに画像も付けておきたいと思います。

A snowball’s chance in Hell

直訳:「地獄の中の雪玉の見込み」
意味:絶対絶望。うまくいく確率ゼロ。
実例:”Our team has a snowball’s chance in Hell of winning the World Cup.”

A storm in a teacup

直訳:「茶碗の中の嵐」
意味:小さいことを大げさにする
実例:”I think this problem is just a storm in a teacup.”

On the fence

直訳:「柵の上」
意味:判断ができない状態
実例:”I’m on the fence if I should go or not.”

Spill the beans

直訳:「豆をこぼす」
意味:秘密を明かしてしまう
実例:”He spilled the beans about the party.”

Put on ice

直訳:「氷に付けておく」
意味:棚上げにする。ある問題を放置して先送りすること。
実例:”Let’s put this project on ice this year.”

The elephant in the room

直訳:「部屋の中の象」
意味: 見て見ぬふりをしている大きな問題
実例:”The relationship between the managers is the elephant in the room.”

まとめ

言語って、単語や文法だけではなく、多彩な文化が作り上げたものと考えると面白いですね。

[Solr]Jaegarと連携させて分散検索処理を追跡する

はじめに

Solr を Jaeger と連携させて分散検索処理を追跡することができます。
https://solr.apache.org/guide/solr/latest/deployment-guide/distributed-tracing.html

Jaeger は分散トレーシングのツールです。
SolrCloud で複数のノードによる分散インデックス・分散検索を利用するときに、どのノードからどのノードへどんなリクエストが送られたか、どのノードでどの処理にどのくらい時間が掛かったかを追跡でき、これらの情報をパフォーマンスの改善などに利用できます。

Jaegerの起動

Jaegerのバイナリをダウンロードサイトからダウンロードして展開し、以下のコマンドを実行します。

./jaeger-all-in-one --collector.zipkin.host-port=:9411

JaegerTracerConfiguratorの設定

solr.xml に以下を追加します。

  <tracerConfig name="tracerConfig" class="org.apache.solr.jaeger.JaegerTracerConfigurator"/>

それ以外のパラメータは Solr 起動時に環境変数で渡します。

bin/solr start -cloud -p 8983 -Denable.packages=true -Dsolr.modules=jaegertracer-configurator -DJAEGER_SAMPLER_TYPE=const -DJAEGER_SAMPLER_PARAM=1

プロダクション環境で全クエリを追跡したくはないときは JAEGER_SAMPLER_TYPE に probabilistic などを指定します。今回は動作確認なので const を指定して全部を対象としています。
JAEGER_SAMPLER_PARAM=1を指定しないとサンプリングが実行されません。

クエリの実行と追跡結果の表示

この実験のために2レプリカずつの2シャードのコレクションを作成しました。準備が整ったら Solr Admin UI で何かクエリを実行してから Jaeger UI ( http://localhost:16686/ )にアクセスします。
以下は追跡結果のタイムライン表示の例です。

2023-03-19 12:37:01.732 INFO  (qtp487416600-120) [c:test s:shard2 r:core_node7 x:test_shard2_replica_n4] o.a.s.c.S.Request webapp=/solr path=/select params={df=_text_&distrib=false&fl=id&fl=score&shards.purpose=16388&start=0&fsv=true&q.op=OR&shard.url=http://localhost:8983/solr/test_shard2_replica_n4/|http://localhost:8983/solr/test_shard2_replica_n5/&rows=10&rid=localhost-6&version=2&q=*:*&omitHeader=false&NOW=1679229421713&isShard=true&wt=javabin&useParams=&_=1678885506788} hits=4562 status=0 QTime=11
2023-03-19 12:37:01.733 INFO  (qtp487416600-15) [c:test s:shard1 r:core_node6 x:test_shard1_replica_n2] o.a.s.c.S.Request webapp=/solr path=/select params={df=_text_&distrib=false&fl=id&fl=score&shards.purpose=16388&start=0&fsv=true&q.op=OR&shard.url=http://localhost:8983/solr/test_shard1_replica_n2/|http://localhost:8983/solr/test_shard1_replica_n1/&rows=10&rid=localhost-6&version=2&q=*:*&omitHeader=false&NOW=1679229421713&isShard=true&wt=javabin&useParams=&_=1678885506788} hits=4676 status=0 QTime=8
2023-03-19 12:37:01.753 INFO  (qtp487416600-120) [c:test s:shard1 r:core_node6 x:test_shard1_replica_n2] o.a.s.c.S.Request webapp=/solr path=/select params={df=_text_&distrib=false&shards.purpose=64&q.op=OR&shard.url=http://localhost:8983/solr/test_shard1_replica_n2/|http://localhost:8983/solr/test_shard1_replica_n1/&rows=10&rid=localhost-6&version=2&q=*:*&omitHeader=false&NOW=1679229421713&ids=22,11,12,24,13,14,15,16,20,10&isShard=true&wt=javabin&useParams=&_=1678885506788} status=0 QTime=1

それぞれのリクエストは上記のログに対応しています。
shard1 と shard2 に id だけを取得するリクエストを並行して投げて、その後、得られた id のリストを統合して結果作成用のリクエストを投げていることが分かります。