それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

ディレクトリがマウントされているか調べる

いまのマウントポイントは、proc ファイルシステムから取得できる。

cat /proc/mounts 

これをgrep すればマウント済みか判定できる

cat /proc/mounts  | grep dir 

また、grep には -qs で結果の true/false だけを取れるので。判定に使える。

ディレクトリ(PATH)がマウントされているか調べる。

dir=/path/to/check
grep -qs $dir /proc/mounts && echo $dir is  mounted 

コレを使うと、シェルスクリプトで便利になる。

dir=/path/to/check
if grep -qs $dir /proc/mounts ; do 
  echo $dir is  mounted 
else 
  mount $dir
if

curl でsocks プロキシを使ってssh先ネットワークから外部接続

curl でsocks プロキシを使って別ネットワークから外に出る。

curl でsocks プロキシを使う。

curl --socks4 127.0.0.1:1080 -v  g.co

socks オプションを使えば、HTTPプロキシではないにしろ、簡単にプロキシを挟める。

socks プロキシ作成(SSH

SOCKSプロ棋士の作成は ssh で瞬殺

 ssh -D 1080 remote-router.lan

これで、127.0.0.1:1080 にSOCKSプロキシが立ち上がるんで、あとはcurl で接続すればおっけ

ssh が通ればプロキシ経由できる。

SSHさえ通れば、プロキシを瞬間で作れてネットーワークを繋げれて外に出られる。

正規表現の\K で1つだけなら後方参照を省略できて便利

\K を使うと、そこまでのマッチ部を省略できる

ip -br a からIPv4 を取り出す例

$ ip -br a | grep eth2
eth2             169.254.70.21/16 fe80::4154:6db4:aec3:32f/64

コレを、\k で書くとこうなる。

ip -br a | grep -oP 'eth2\s+\K[\d.]+'

つまり、後方参照を使わなくても、「前読み」で戦えるわけだ。

php の例

これをphpで使うと。次の用になる。

before( グループ )

<?php 

preg_match_all( '/^eth2\s+([\d.]+)/m', `ip -br a ` , $m);
if ( sizeof ($m) > 0 ){
  var_dump($m[1][0]);
}

after ( \K 利用時 )

<?php
preg_match_all( '/^eth2\s+\K[\d.]+/m', `ip -br a ` , $m);

var_dump($m);

if 文が省略できて便利。

ruby とかでも

#!/usr/bin/env ruby
p `ip -br a `.match(/^eth2\s+([\d.]+)/)
p `ip -br a `.match(/^eth2\s+\K[\d.]+/)

結果はこの様になる。

#<MatchData "eth2             169.254.70.21" 1:"169.254.70.21">
#<MatchData "169.254.70.21">

if文などチェックが簡潔になる。

ネストが減らせて便利。

知ってたら楽、知らなくていいコト。そして、初見殺しである。知らない人にはなぜそうなるか全く想像がつかない間違ったソースコードに見える可能性があって怖いけど便利。

関連資料

Grep に'\K' という便利な書式がある。 - それマグで!

広告フィルタ・ルールを統合して圧縮できる。

ああ、そうかAdguardのルールって1行1つじゃなくてもいいのか。

Adguardのブロックルール

example.tld##.class_a
example.tld##.class_b

だとすると

example.tld##.class_a, class_b

と書いても同じなのね。

これで行数を節約したり、記述を統合して場所ごとに管理しやすくできるわ。

迷惑広告が増えていてルールが増えていく

ad filter (広告フィルタ)の行数を節約したい。

iOSには上限がある。行数が多いと登録・更新に時間がかかる。ロード後のフィルタ適用が遅くなり、ページロード高速化のためにやってるブロックが読み込み速度を遅延させるという本末転倒が起きる。

adguard など iOSのフィルタルールは行数に制約があります。

iOSのフィルタルールにはバグが有り、本来の上限より、ずっと低い値しか入らないバグがあったりする。

https://adguard.com/ja/blog/adguard-v4-5-1-for-ios.html

行数の節約を考えて、ルールを見直していて気づいた。

行数を節約したり、あれこれ考えていて、「1行で複数にマッチする」ように書けばいいことに気づいた。

例えば、xpath

:xpath( /a or /b )

例えば、CSS

##.class_a, .class_b

うまくやれば、管理が楽になりそう。

LUKSなディスクを追加するコマンド

luks のディスクを作る

LUKSのディスクを作るときに、鍵ファイルや、スペア鍵、パスフレーズを設定するのがめんどうだったの手順をできる限り、簡素化して、スクリプトにまとめた

## デバイスを措定
DEV=/dev/sde  

## 鍵ファイルを用意
SPARE=/boot/keys/spare.keybin
KEY=/boot/keys/disk.keybin 
SECTOR=512
## パスフレーズを用意
PASS=$(cat /enc/pass |  openssl enc -d  -pbkdf2 -base64 -aes256)

## 鍵を3つ登録
##  --sector-size 注意する
sudo cryptsetup luksFormat --key-file=$KEY --sector-size=$SECTOR $DEV
sudo cryptsetup luksAddKey --key-file=$KEY --new-keyfile=$SPARE $DEV
sudo cryptsetup luksAddKey --key-file=$KEY $DEV < <(echo -n $PASS)

## テスト
sudo cryptsetup luksOpen --test-passphrase $DEV < <(echo -n "$PASS")
sudo cryptsetup luksOpen --test-passphrase --key-file=$KEY $DEV
sudo cryptsetup luksOpen --test-passphrase --key-file=$SPARE $DEV

## luks のIDを表示
sudo cryptsetup luksUUID $DEV

# Extract the model number and serial number using grep
hdparm_output=$(sudo hdparm -I "$DEV" )
model_number=$(echo "$hdparm_output" | grep -oP "Model Number: \K.*" | sed -e 's/^[[:space:]]*//' -e 's/[[:space:]]*$//')
serial_number=$(echo "$hdparm_output" | grep -oP "Serial Number: \K.*" | sed -e 's/^[[:space:]]*//' -e 's/[[:space:]]*$//')
echo $model_number
echo $serial_number

## crypttab に登録
MAP_NAME=crypt-disk10

printf "%s UUID=%s %s luks,keyslot=0 # %s/%s %s \n" \
 $MAP_NAME $(sudo cryptsetup luksUUID $DEV) $KEY "$model_number" "$serial_number" $(date -I)

/etc/crypttab に書いたらテスト

暗号ディスクを展開する。

sudo cryptdisks_start crypt-disk10        
sudo cryptdisks_stop crypt-disk10        
sudo cryptdisks_start crypt-disk10        

既存のディスクを入れ替える。

既存のLVMに、組み込んで

sudo pvcreate /dev/mapper/crypt-disk10      
sudo vgextend data /dev/mapper/crypt-disk10   

既存のLVMのデータを移動させる

sudo pvmove /dev/mapper/crypt-disk05 /dev/mapper/crypt-disk10      
sudo vgreduce data /dev/mapper/crypt-disk05
sudo pvremove /dev/mapper/crypt-disk05
## もし、容量拡大ディスクなら resizeも必要。容量縮小なら、shrink する。
sudo resize2fs /dev/mapper/NAME

数TBあると時間かかるので、あとはのんびりと。

過去記事に書いた内容を整理整頓した。

h265/hevc でエンコードをCRF=29で、preset 色々試してみた

CRF-29 でpreset比較したもの

CRF29 の圧縮率でHEVCをソフトウェアエンコード・ソフトウェアデコードの条件下で、プリセットを変えてみた。

プリセットはそこまで画質に影響しない。

正直言って明らかに変わる程度ではなかった。

SSIMをみてると、小数点3桁以下が変化してる。つまり、1%も変わらないのである。

TV番組次第ではh265 の urltrafast でも問題がない。

テレビ録画に関しては、通常の民放・NHKのバラエティ番組は、もともとエンコードの画質が良くない。アニメの保存用でもない限り、エンコード品質を上げても仕方がない。民放はCRF=32でも問題ないと思うレベル。NHKスペシャルNHK BSとWOWOWは元の画質がそこそこきれいなので圧縮率を上げたらもったいない気がする。それでもCRF=28のデフォルトで問題ないとも思う。CRF=20でもいいと思う。スポーツ・ライブ番組はハードウェアエンコードだろうから(ライブの性質上、CPUエンコードを待ってられない)、元ストリーミングの画質が不良なので圧縮率を高めても多分問題はない。

また、MUSIC FAIR や 徹子の部屋のようなトーク番組は、画面変化が少ないので圧縮率上げても問題がない。同じ意味でNHKのETVは、画面の動きが単調なので、圧縮率を稼げてしまう。h265 でも問題がなさそう。ただし「きょうの料理」は手元の動きを頻繁に撮影するので画質のばらつきが出てしまっていた。

rdp/3389 をコマンドから許可する。

RDP に繋がらん

RDPに接続しようとしたら、RDPに繋がらない。SSHは繋がっている。

どうやら、Windowsアップデートなどの更新作業でRDPポートが閉じられてしまった模様。 ネットワーク抜きさしでPublic判定を食らったかもしれない。

ssh 経由で

コマンドでRDP 3389 を許可する

netsh advfirewall firewall add rule name="Open Port 3389" dir=in action=allow protocol=TCP localport=3389

コマンドでRDPを許可した。ユーザーがUAC昇格可能なユーザなのであっさりと終わった。

adguardで特定のパスだけをブロック

アドブロッカーの書式サンプルです。

特定のPATHでだけ動作する。ブロックルール

https://github.com/gorhill/uBlock/wiki/Procedural-cosmetic-filters#subjectmatches-patharg

特定のパスを消す場合は次の通り。

example.tld/path/to/address##.adsample

たとえば、Twitter(X)で、特定のアドレスときだけ、フィルタを適用する。

twitter.com/takuya_1st##[aria-label$="View post analytics"] span
x.com/takuya_1st##[aria-label$="View post analytics"] span

上記の例では、自分のツイートの閲覧数を非表示にする。閲覧数を見ても精神的に不健康にしなからないので、不要である。

matches-path() を用いる例

たとえば、自分のプロフィールから投稿履歴でLikeやRTを消して、精神的な安寧を得る。

twitter.com##[rel="canonical"][href="https://x.com/takuya_1st"]:upward(html)  div
twitter.com##matches-path(/takuya_1st) div 

人の評価を気にしていてたら、炎上を狙ったツイートをしてしまい、主語が大きくなってしまう。

セキュアブートが有効の時は、スリープ出来ない

セキュアブートが有効の時は、スリープ出来ない

TPMロックをしたUbuntuHibernateを拒否してくる。理由を調べたらセキュアブートだった。

「仕様です。」とのこと。

セキュアブートではHypbernateに復帰したときは、BIOSを通るので、セキュアブートを噛ませられない感じ?

まぁ、ほかにも復帰してログイン済みセッションが戻ってきたら誰でも操作できてしまうし。

たしかにそれはまずいので仕様で操作不能にするのありなのかもしれない。

Windowsでは復帰できるのでは?と思うので、Linux界隈では対応が遅れてるというかやる気がない。って感じなんでしょうか。

hybernate が使えないのは個人的には辛い

個人的には hybernateはお気に入りです。使えないのは辛いですよね。

I have the same problem and, unfortunately, it's impossible with the official Ubuntu kernel since version 4.13 due to kernel lockdown patchset (efi-lockdown). Substantiation is:

セキュアブート後に使えるステータス cat /sys/power/state するとdisk が消えている。

kernel lockdown なのでsudo mokutil --disable-validation して検証を無効にすればいいわけですが。。。

今は、SSDが十分に速いから「ハイバネーション復帰時間」もあまり気にならない。ハイバネーションssdに負荷をかけるのも良くないとわかりつつも、64GB もメモリ搭載していたら、ハイバネーション負荷もやばいよねやっぱり。

まぁ、あまり触らないことにしておくのが良いかもしれない。

snap なしで、firefoxをインストールする。

snap なしで、firefoxをインストールする。

USBメモリubuntu を入れると、ストレージアクセスとメモリ食って遅いので、firefoxdeb で入れたい。

そもそも、usbメモリインストールとかLive USBでは、snapdを使いたくない。

Firefoxを使うのは基本路線として、Snapdを使うのをやめさせたい。マウントしまくってデータがどこに有るのか。慣れてないのでよくわからない。

sudo add-apt-repository ppa:mozillateam/ppa


echo '
Package: *
Pin: release o=LP-PPA-mozillateam
Pin-Priority: 900
' | sudo tee /etc/apt/preferences.d/mozilla

sudo apt update && sudo apt upgrade 
sudo apt install firefox

firefoxのキャッシュストレージをtmpfs にして、高速化をする。

## キャッシュストレージ tmpfs でもういいです。
echo tmpfs /home/takuya/.cache/mozilla tmpfs uid=$UID,defaults,nodiratime,noatime,mode=0700 0 0 | tee -a /etc/fstab

プロファイルも揮発性にする

## firefox 起動後に初期設定済みのプロファイルを作成
cp ~/.mozilla/firefox ~/.mozilla/firefox.default
echo "
# unionfs で プロファイルを揮発性に
tmpfs /home/takuya/.mozilla/volatile tmpfs uid=1000,defaults,nodiratime,noatime,mode=0700 0 0
none /home/takuya/.mozilla/firefox unionfs dirs=/home/takuya/.mozilla/volatile=rw:/home/takuya/.mozilla/firefox=ro 0 0
" | sudo tee -a /etc/fstab

揮発性プロファイルはログインクッキーなどが保存されなくなるが、unionfs にしているので終了時にまとめて書き込めばいい。このあたりは今後使いながら調整していこうと思う。

プロファイルにもかなり書き込みが行われるのでUSB Live などでつかうなら揮発性で良いかなと思う。

参考資料

https://www.how2shout.com/linux/how-to-install-firefox-on-ubuntu-22-04-or-24-04-without-snap/

vs code が右クリックメニューをスパム行為するので消す。

vs code が右クリックメニューが嫌い。

  • Drive
  • Directory
  • Background
  • all file(*)

これらにメニューをスパム行為のように登録してくる。とても使いにくい。

レジストリを操作する。

UAC昇格した、PowerShellで、次のコマンドを実行する。

## VS Code がうるさいので消す。
New-ItemProperty -LiteralPath 'HKLM:\SOFTWARE\Classes\Drive\shell\VSCode' -Name 'LegacyDisable' -PropertyType 'String' -Value ''
Move-Item -LiteralPath 'HKLM:\SOFTWARE\Classes\Drive\shell\VSCode'  -Destination 'HKLM:\SOFTWARE\Classes\Drive\shellex\VSCode'

New-ItemProperty -LiteralPath 'HKLM:\SOFTWARE\Classes\Directory\shell\VSCode' -Name 'LegacyDisable' -PropertyType 'String' -Value ''
Move-Item -LiteralPath 'HKLM:\SOFTWARE\Classes\Directory\shell\VSCode'  -Destination 'HKLM:\SOFTWARE\Classes\Directory\shellex\VSCode'

Move-Item -LiteralPath 'HKLM:\SOFTWARE\Classes\*\shell\VSCode'  -Destination 'HKLM:\SOFTWARE\Classes\*\shellex\VSCode'

きれいに消える。Shift押したときのEXメニューにはちゃんと残るので良い。

完全に無効化する場合

次の方法で、LegacyDisableという、空文字のエントリを作成する。

$path='HKLM:\SOFTWARE\Classes\Drive\shell\VSCode'
New-ItemProperty -LiteralPath $path  -Name 'LegacyDisable' -PropertyType 'String' -Value ''

直接削除するか、別名に変更でも構わないが、LegacyDisable をつかって無効化しておくのが無難だと思う。

shell ex ( shift 押したときのメニュー)に変える場合

shellshellex に変えればいい 。

$src='HKLM:\SOFTWARE\Classes\Drive\shell\VSCode'
$dst='HKLM:\SOFTWARE\Classes\Drive\shellex\VSCode'
Move-Item -LiteralPath $src  -Destination $dst

これらの方法は、ほかの右クリックメニューを排除するけど、たまに使うってときに便利です。

git-bash が右クリックメニューを占拠するので消す。

vscode と git-bash は現代では基本ツールだと思うけど。

どうしてこんなに右クリックメニューを専有するのだろうか。

git-bash は、vscode から使うだろうし、そこまでメニュー統合してほしいとは思わない。

git-bash をコンテキスト・メニュー(右クリックメニュー)から消す。

## git-bash を消す。exへ移動する。
Move-Item -LiteralPath 'HKLM:\SOFTWARE\Classes\Directory\shell\git_gui' -Destination 'HKLM:\SOFTWARE\Classes\Directory\shellex\git_gui' 
Move-Item -LiteralPath 'HKLM:\SOFTWARE\Classes\Directory\shell\git_shell' -Destination 'HKLM:\SOFTWARE\Classes\Directory\shellex\git_shell' 

New-ItemProperty -LiteralPath 'HKLM:\SOFTWARE\Classes\Directory\background\shell\git_gui'   -Name 'LegacyDisable' -PropertyType 'String' -Value ''
New-ItemProperty -LiteralPath 'HKLM:\SOFTWARE\Classes\Directory\background\shell\git_shell' -Name 'LegacyDisable' -PropertyType 'String' -Value ''

windows がv6/v4 でping に応答しない。

windows はdefaultでping応答しない。

ファイア・ウォール設定で icmp echo の igress (inbound) を有効にする必要がある。

応答(icmp reply) については出ていくパケットに制限が掛かってないので特に設定の必要がなかった。

Core Networking の項目の中にあるので、探すのはちょっとめんどくさい。

v4もv6 もicmp echo を切られているので、ちょっとめんどくさい。

コマンドから

v4 の icmp echo を有効にする。

netsh advfirewall firewall add rule name="ICMP Allow incoming V4 echo request" protocol=icmpv4:8,any dir=in action=allow

icmp はオフにするものなの?

icmp echo をデフォルトでOFFにする理由ってなんなのでしょうか。百台規模でLAN組んでる組織なら自分で設定するべきだろうし、一般ユーザ向けOSでこの設定の意味がわからん。巨大なLANだとしてもスイッチやGWで切ってしまえばいいようなものだと思うんですが。

ping 応答しないのがセキュリティなんですかねぇ。icmp 応答拒否はデメリットも多いと思うんです。巨大なLANならともかく、小さいLANでping(icmpv4)を拒否しても、ARPは飛び交ってるわけで。ping拒否はセキュリティなんですかね。

Windowsは詳しくないけど、ping は 応答しないのが世間の常識らしい。従っておくしかないようです。

ubuntu でnet-installが使えなくなり、PXEブートインストールもしんどくなった

virsh install でインストール時にダウンロードできていた。

いままでは、virt-install でインストールできた。必要なパッケージはAptで取ってくるのでAPTプロキシが良い感じに効いてくれた。

virt-install --location http://archive.ubuntu.com/ubuntu/dists/focal/main/installer-amd64/

net-installのインストールのURLを指定するだけで良かった。http://archive.ubuntu.com/ubuntu/dists/focal/main/installer-amd64/

これでlinux のイメージを直接指定できたのだが、22.04 以降ではできなくなっている。

Ubuntuは、net-installをlegacy インストールだと言い放ち、サポート終了している。cloud-init作ったからいいよね。っていうのはちょっとどうかと思うんですけど。

どうしてミラーできない方法をとってしまったのか。などと思う。

同じものを作って捨てるってのがめんどくさいんですよね。従来のインストールならaptのプロキシでデータを共有できたんですよね。

対策1

focal でインストールして、dist-upgrade する。

NAME=ubuntu-2204
DISK=/var/lib/libvirt/images/ubuntu-2204.qcow2
[[ ! -e $DISK ]] && sudo qemu-img create -f qcow2 $DISK 10G 

virt-install \
--name $NAME \
--ram 8192 \
--disk path=$DISK \
--vcpus 4 \
--virt-type kvm \
--os-variant ubuntu22.04 \
--graphics none \
--location 'http://archive.ubuntu.com/ubuntu/dists/jammy/main/installer-amd64/' \
--extra-args "console=tty0 console=ttyS0,115200n8"

対策2

ISOをダウンロードして、を指定する。

ダウンロードして

curl -LJO 'https://releases.ubuntu.com/24.04/ubuntu-24.04-live-server-amd64.iso'

Location指定する。

--location $ubuntu_server_iso,kernel=casper/vmlinuz,initrd=casper/initrd

ISOを使ってインストール

NAME=ubuntu-2404
DISK=/var/lib/libvirt/images/ubuntu-2204.qcow2
[[ ! -e $DISK ]] && qemu-img create -f qcow2 $DISK 10G 
cd /tmp 
curl -LJO 'https://releases.ubuntu.com/24.04/ubuntu-24.04-live-server-amd64.iso'
cd - 
ubuntu_server_iso=$(ls /tmp/ubuntu*.iso)


virt-install \
--name $NAME \
--ram 8192 \
--disk path=$DISK \
--vcpus 4 \
--virt-type kvm \
--os-variant ubuntu-lts-latest \
--graphics none \
--location $ubuntu_server_iso,kernel=casper/vmlinuz,initrd=casper/initrd \
--extra-args "console=tty0 console=ttyS0,115200n8"

ただ、ISOが3GBになるので、事前準備がめんどくさい。起動して初期設定を済ませてからダウンロードするほうが、絶対楽だったんだよなぁ。なにか手を考えたいと思う。

ubuntu のISO配布Archiveサーバーおそいんですよねぇ。何かいい方法ないかなぁ

後始末の例

実験して後始末してデータを消す。

virsh destroy $NAME
virsh undefine $NAME

対策3 PXEインストール

アドレスを変えてPXEインストール用のイメージ(https://releases.ubuntu.com/24.04/)を使う

閲覧すると。netbootがあるんで、見に行くと。pxeイメージが転がっている。 https://releases.ubuntu.com/24.04/netboot/amd64/

PXEブートのイメージを取ってきて、

--location 'https://releases.ubuntu.com/24.04/netboot/amd64/,initrd=initrd,kernel=linux'

ただ、PXEブートはISOを取得するので、ISOを指定しているのとあまり変わらない。

iso-url=https://releases.ubuntu.com/24.04/ubuntu-24.04-live-server-amd64.iso

いちおうインストールしてみた。

NAME=ubuntu-2404
DISK=/var/lib/libvirt/images/ubuntu-2404.qcow2
[[ ! -e $DISK ]] && qemu-img create -f qcow2 $DISK 30G 

virt-install \
--name $NAME \
--ram 8192 \
--disk path=$DISK \
--vcpus 4 \
--virt-type kvm \
--os-variant ubuntu22.04 \
--graphics none \
--location 'https://releases.ubuntu.com/24.04/netboot/amd64/,initrd=initrd,kernel=linux' \
--extra-args "console=tty0 console=ttyS0,115200n8,"

これで問題なくインストールが始まるが、起動後にISOのダウンロードが始まるので。

これはでは、PXEブートの意味がない気がする。 結局、効率が悪い。

qcow2 のディスクをリサイズ(拡大)

qcow2 のディスクをリサイズ(拡大)

お急ぎの場合

DISK=/var/lib/libvirt/images/ubuntu-2404.qcow2
qemu-img info $DISK 
qemu-img resize -f qcow2 $DISK +10G
virt-sparsify --in-place $DISK

nbdを使ってgidks で処理すると確実です。

nbdを使う。

はじめに、qcow2 をリサイズ。

DISK=/var/lib/libvirt/images/ubuntu-2404.qcow2
qemu-img info $DISK 
qemu-img resize -f qcow2 $DISK +10G

nbd をロードする。

sudo modprobe nbd max_part=8

nbd 二接続する

sudo qemu-nbd  --connect=/dev/nbd0 $DISK

必要に応じて、GPTを再構成

ディスクのサイズ変更が反映されないときは、gidks を起動して何もせずにWを書く。

または、GPTを再構成する。

sudo gidisk /dev/nbd0

GPTの再構成をしないとqcow2 のサイズ変更が反映されない。(USBメモリでDDしたときと同じ)

nbd を確認する。

takuya@:~$ lsblk /dev/nbd0
NAME                       SIZE FSAVAIL FSUSE% FSTYPE
nbd0                        30G
├─nbd0p1                     1M
├─nbd0p2                   1.8G                ext4
└─nbd0p3                   8.2G                LVM2_member
  └─ubuntu--vg-ubuntu--lv  8.2G                ext4

パーティションを操作する

LVMにはメタデータが含まれる

LVMのパーティションサイズ=実サイズ+LVMメタデータサイズ

メタデータのサイズを確認する

sudo pvck /dev/nbd0p3
  Found label on /dev/nbd0p3, sector 1, type=LVM2 001
  Found text metadata area: offset=4096, size=1044480

メタデータがsize=1044480であるとわかる。

20GB確保するなら次の通り LVMはPEで設定するので、PE(4x10242)になるので、20GBはPE幾つ分かをみておきます ちなみに、1PE=4Mib です。

20*1024**3/(4*1024*1024)=5120PE

PEのサイズが5120である。

現在のPEサイズを確認すると、2111PEだとわかる。

takuya@:~$ sudo pvdisplay /dev/nbd0p3
  --- Physical volume ---
  PV Name               /dev/nbd0p3
  VG Name               ubuntu-vg
  PV Size               <8.25 GiB / not usable 0
  Allocatable           yes (but full)
  PE Size               4.00 MiB
  Total PE              2111
  Free PE               0
  Allocated PE          2111

反映する。

sudo pvck /dev/nbd0p3

あとは、通常のリサイズと同じ

sudo vgs ubuntu-vg
sudo lvresize ubuntu-vg/ubuntu-lv  --resizefs  -l +100%FREE
sudo lvs 

後片付け

sudo dmsetup ls 
sudo dmsetup remove ubuntu--vg-ubuntu--lv
sudo qemu-nbd  --disconnect /dev/nbd0 
sudo lsblk
sudo modprobe nbd max_part=8

再起動

sudo virtsh start $NAME --console