sudo vi /boot/firmware/config.txt で
[all]
dtparam=pciex1_gen=3
にしてrebootしたら
dd if=/dev/zero of=./test.img bs=1M count=1024 oflag=direct
1024+0 records in
1024+0 records out
1073741824 bytes (1.1 GB, 1.0 GiB) copied, 1.31234 s, 818 MB/s
倍速になった
sudo vi /boot/firmware/config.txt で
[all]
dtparam=pciex1_gen=3
にしてrebootしたら
dd if=/dev/zero of=./test.img bs=1M count=1024 oflag=direct
1024+0 records in
1024+0 records out
1073741824 bytes (1.1 GB, 1.0 GiB) copied, 1.31234 s, 818 MB/s
倍速になった
wifi接続のkvm
kvmのcloneを日々作成
これを
sudo cat /root/virsh_clone_mail.sh
#!/bin/bash
export PATH=$PATH:/usr/bin:/usr/sbin:/sbin:/bin
# --- 設定 ---
LOG_FILE="/var/log/virsh_clone.log" # ログの保存先
MAIL_TO="your_mail_addresss@sample.com" # ★通知先メールアドレスを指定してください
HOSTNAME=$(hostname)
ERROR_COUNT=0 # エラーカウンター初期化
# ログ出力用関数(日時付き)
log_message() {
echo "$(date '+%Y-%m-%d %H:%M:%S') : $1"
}
# エラー発生時のカウント用関数
handle_error() {
log_message "【ERROR】$1" >&2
((ERROR_COUNT++))
}
# --- 処理開始 ---
{
log_message "=== Virsh Clone Script Started ==="
# 日付の取得
yyyymmdd=$(date +'%Y_%m_%d')
# 開始時に起動していたVMの一覧を取得
running_vms=$(virsh list --name)
if [ -n "$running_vms" ]; then
# 1. 安全なシャットダウンの要求
log_message "Shutting down running VMs..."
for vm in $running_vms; do
virsh shutdown "$vm" >/dev/null
done
# 2. 停止完了を待つ(最大30秒)
WAIT_TIME_SECONDS=30
while [ -n "$(virsh list --name)" ] && [ $WAIT_TIME_SECONDS -gt 0 ]; do
printf "\rWaiting: %2d seconds remaining..." "$WAIT_TIME_SECONDS"
sleep 1
((WAIT_TIME_SECONDS--))
done
echo ""
# 3. まだ停止していないVMを強制停止 (destroy)
remaining_vms=$(virsh list --name | grep . || true)
if [ -n "$remaining_vms" ]; then
for vm in $remaining_vms; do
log_message "Force stopping (destroy) $vm..."
virsh destroy "$vm" >/dev/null || handle_error "Failed to destroy $vm"
done
fi
fi
# 4. 古い世代の削除 & 新規クローン処理
if [ -n "$running_vms" ]; then
border_date=$(date -d "3 days ago" +'%Y%m%d')
for vm in $running_vms; do
# 世代管理:古いクローンの自動削除
existing_clones=$(virsh list --all --name | grep "^${vm}-[0-9]\{4\}_[0-9]\{2\}_[0-9]\{2\}$" || true)
for clone in $existing_clones; do
clone_date_str=$(echo "$clone" | grep -o "[0-9]\{4\}_[0-9]\{2\}_[0-9]\{2\}$" | tr -d '_')
if [ -n "$clone_date_str" ]; then
if [ "$clone_date_str" -lt "$border_date" ] || [ "$clone_date_str" -eq "$today_date" ]; then
log_message "Deleting old/duplicate clone: $clone"
virsh destroy "$clone" >/dev/null 2>&1
if ! virsh undefine "$clone" --remove-all-storage --nvram --snapshots-metadata >/dev/null; then
handle_error "Failed to delete clone '$clone' and its storage."
fi
fi
fi
done
# 新規クローンの作成
clone_name="${vm}-${yyyymmdd}"
log_message "Cloning $vm to $clone_name..."
if ! virt-clone --original "$vm" --name "$clone_name" --auto-clone >/dev/null; then
handle_error "Failed to clone '$vm' to '$clone_name'."
fi
done
fi
# 5. 元々起動していたVMを再起動
if [ -n "$running_vms" ]; then
log_message "Restarting original VMs..."
for vm in $running_vms; do
virsh start "$vm" >/dev/null || handle_error "Failed to start $vm"
done
fi
# 6. 最終結果の判定とメール通知
if [ $ERROR_COUNT -gt 0 ]; then
SUBJECT="[ALERT] KVM Clone Failed on ${HOSTNAME}"
log_message "【WARNING】Clone process completed with $ERROR_COUNT error(s)."
# 今回の実行ログから「本日のエラー箇所」を抽出してメール本文にする
MAIL_BODY=$(grep "$(date '+%Y-%m-%d')" "$LOG_FILE" | grep -E "【ERROR】|【WARNING】")
# メール送信処理(mailコマンドを使用)
echo -e "KVMの自動クローン処理でエラーが発生しました。\n詳細はログファイル(${LOG_FILE})を確認してください。\n\n--- 主なエラーログ ---\n${MAIL_BODY}" | mail -s "$SUBJECT" "$MAIL_TO"
log_message "Error notification email sent to ${MAIL_TO}."
else
log_message "Clone completed successfully."
fi
} 2>&1 | tee -a "$LOG_FILE"
ここまでを
sudo crontab -l
[sudo] password for user:
# Edit this file to introduce tasks to be run by cron.
#
# Each task to run has to be defined through a single line
# indicating with different fields when the task will be run
# and what command to run for the task
#
# To define the time you can provide concrete values for
# minute (m), hour (h), day of month (dom), month (mon),
# and day of week (dow) or use '*' in these fields (for 'any').
#
# Notice that tasks will be started based on the cron's system
# daemon's notion of time and timezones.
#
# Output of the crontab jobs (including errors) is sent through
# email to the user the crontab file belongs to (unless redirected).
#
# For example, you can run a backup of all your user accounts
# at 5 a.m every week with:
# 0 5 * * 1 tar -zcf /var/backups/home.tgz /home/
#
# For more information see the manual pages of crontab(5) and cron(8)
#
# m h dom mon dow command
0 2 * * * /root/virsh_clone_mail.sh > /dev/null 2>&1
これでap2:00に実行
ipv6でwifi接続したkvm
golang fiberv3 でfileをuploadできる掲示板を作ってみた1000行程度でできる。
コードが読みやすいのと、本番環境へ配置するファイルを一つにできるのが良い。
googleAIと会話してたらいつのまにかあれもこれもと提案され、個人のメモ機能で使いもしない通知機能を追加した。
1600行になっちまった。せっかくJavaScriptじゃなくてhtmlだけでsimpleにできていたのに。これはこれで素晴らしいけど。2026.09.09
oracle-ai-database-free-26ai-23.26.2-1.el9.aarch64.rpmをinstallして23aiから復元した。これで様子見
debian13に切り替えたので封鎖した。
go fiber v3に書き換え中
go fiber で記述してみた
IPv6で繋がらないので
ln, err := net.Listen("tcp6", "[::]:3000")
if err != nil {
log.Fatal(err)
}
log.Fatal(app.Listener(ln))
にした。
debian13に切り替えたので封鎖した。
go言語で記述しbuildした掲示板です。debian13に切り替えたので封鎖した。
oracle-ai-database-free-26ai-23.26.0-1.el8.aarch64.rpmをinstallして23aiから復元した。
2026.07.10にOracleLinux9.8で開設できたので封鎖した。
go でFileserverをつくってみた。go build すれば、一つのファイルを配置するだけで公開できる。素晴らしい。
開発は、Operating System: Ubuntu 24.04.3 LTS
Kernel: Linux 6.8.0-1044-raspi
Architecture: arm64
公開は、Operating System: Debian GNU/Linux 12 (bookworm)
Kernel: Linux 6.12.47+rpt-rpi-2712
Architecture: arm64
2026年は、go で掲示板を作ってみた。短いコードで簡単にできちゃう。
go build は余計なコードを書くと通らないので後で読みやすい。
go も学ぶには良い言語だと思う。
google のAIも助かる。わかりやすいコードを教えてくれる。
この外付けSSDはSD無しで起動できないのでこのままです。
~ $ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
sda 8:0 0 476.7G 0 disk
|-sda1 8:1 0 4G 0 part
`-sda2 8:2 0 472.5G 0 part /
mmcblk0 179:0 0 57.6G 0 disk
|-mmcblk0p1 179:1 0 512M 0 part /boot/firmware
`-mmcblk0p2 179:2 0 57.1G 0 part
debianのcockpit-machinesでkvmです。
$ vcgencmd measure_temp
temp=47.7'C
本当は、いきなりvmをshutdownするのではなく、dbをshutdownしてから、OSをshutdown したいけど
バックアップはこんな感じ
~ $cat virsh_running_vms_backup.sh
#!/bin/bash
BACKUP_DIR="/home/user/backup/libvirt"
mkdir -p "$BACKUP_DIR/images" "$BACKUP_DIR/qemu"
running_vms=$(virsh list --name)
if [ -n "$running_vms" ]; then
for vm in $running_vms; do
virsh shutdown "$vm"
done
WAITE_TIME_SECONDS=30
while [ -n "$(virsh list --name)" ] && [ $WAITE_TIME_SECONDS -gt 0 ]; do
printf "\rWaiting: %2d seconds remaining..." "$WAITE_TIME_SECONDS"
sleep 1
((WAITE_TIME_SECONDS--))
done
remaining_vms=$(virsh list --name)
if [ -n "$remaining_vms" ]; then
for vm in $remaining_vms; do
virsh destroy "$vm"
done
fi
fi
for vm in $(virsh list --all --name); do
virsh dumpxml "$vm" > "$BACKUP_DIR/qemu/$vm.xml"
done
rsync -ah --progress /var/lib/libvirt/images/ "$BACKUP_DIR/images/"
if [ -n "$running_vms" ]; then
for vm in $running_vms; do
virsh start "$vm"
done
fi
echo "Backup completed”
実行
結果~ $ sudo bash virsh_running_vms_backup.sh
Domain 'unknown-2025-9-11' is being shutdown
Waiting: 23 seconds remaining...sending incremental file list
./
unknown-2025-9-11.qcow2
42.96G 100% 102.96MB/s 0:06:37 (xfr#1, to-chk=0/2)
Domain 'unknown-2025-9-11' started
Backup completed
リンク先は、位置情報と思考を記録する個人のページです。いつ・誰が・どこで・何を・思い巡らしたかを記録する。また、記録を一覧で確認でき、メールアドレスで共有もできる。思いをここに記録し、メモリーを解放できるので、すっきりする。
2025.10.31 MacBookAirで24時間運用していたこのページは封鎖する。->封鎖した。
夏の飲み物
秋の飲み物
冬の飲み物
初夏の飲み物
20夏2025
秋
黒糖焼酎
ーワイン
ワイン
リンク先は、oracle21c
Oracle21cExpressで作成。
MacBookAir(M1)にUTM+OracleLinux8.6x86_64+Oracle21cExpress
memory:2G
strage:23G
oracle
リンク先
をRockyLinux8.10_min_ni_Oracle23aiFree_install
に変更、現在は、Oracle Database Free RPM on Linux for ARM (aarch64) + UTM +MacBookAir(M1)
開発環境cockpit Ubuntu
開発環境cockpit Debian
Macで使うショートカット
メールアドレスとパスワードを入力すれば誰でもどこでも使えます。
但し、私のMacBook Airが動作している時間帯に限ります。容量は12Gまでです。
いっぱいになったら、新たにリンク先を追加します。
こっちも封鎖です。データは、025.09.11 RaspberryPi5_debian_cockpit-machines_ni_OracleDに移しました。
RaspberryPi 5で稼働しています。sdでboot、ssdで稼働中です。容量は、
~ $ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
sda 8:0 0 476.7G 0 disk
├─sda1 8:1 0 300M 0 part
└─sda2 8:2 0 476G 0 part /
mmcblk0 179:0 0 15G 0 disk
├─mmcblk0p1 179:1 0 512M 0 part /boot/firmware
└─mmcblk0p2 179:2 0 14.5G 0 part
sda1とmmcblk0p2は無駄です。消費電力3w-4w起動時6w
4半世紀前の仕様だけど、3行程度で公開できる
crontab -e で
@reboot bash /home/user/http_server_post_start.sh
を追加。
vi http_server_post_start.sh で、
#!/bin/bash
cd /home/user/py
python3 http_put_post_server.py -b 0.0.0.0 8001 -d /home/user/py/src
を、/home/user/py に保存する。/home/user/py/src が一般公開される。
アクセスログは、/home/user/py に書き込まれる。
pythonには学ぶところが多い。シンプルで規則正しい。必要なことが短いコードで実現できる。
2025.03.19
~ $ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
sda 8:0 0 1.8T 0 disk
├─sda1 8:1 0 512M 0 part /boot/firmware
├─sda2 8:2 0 128G 0 part /
├─sda3 8:3 0 128G 0 part
└─sda4 8:4 0 1.6T 0 part /mnt/ssd1600
sd無し。ssdだけで起動できます。sda3はOSバックアップsda4はDataバックアップ用です。
debianのcockpit-machinesでkvmこれが安定している。これで様子見です。
メールアドレスとパスワードを入力すれば誰でもどこでも使えます。
但し、私のMacBook Airが動作している時間帯に限ります。容量は12Gまでです。
いっぱいになったら、新たにリンク先を追加します。
こっちも封鎖です。データは、025.09.11 RaspberryPi5_debian_cockpit-machines_ni_OracleDに移しました。
RaspberryPi 5で稼働しています。sdでboot、ssdで稼働中です。容量は、
~ $ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
sda 8:0 0 476.7G 0 disk
├─sda1 8:1 0 300M 0 part
└─sda2 8:2 0 476G 0 part /
mmcblk0 179:0 0 15G 0 disk
├─mmcblk0p1 179:1 0 512M 0 part /boot/firmware
└─mmcblk0p2 179:2 0 14.5G 0 part
sda1とmmcblk0p2は無駄です。消費電力3w-4w起動時6w
4半世紀前の仕様だけど、3行程度で公開できる
crontab -e で
@reboot bash /home/user/http_server_post_start.sh
を追加。
vi http_server_post_start.sh で、
#!/bin/bash
cd /home/user/py
python3 http_put_post_server.py -b 0.0.0.0 8001 -d /home/user/py/src
を、/home/user/py に保存する。/home/user/py/src が一般公開される。
アクセスログは、/home/user/py に書き込まれる。
pythonには学ぶところが多い。シンプルで規則正しい。必要なことが短いコードで実現できる。
2025.03.19
~ $ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
sda 8:0 0 1.8T 0 disk
├─sda1 8:1 0 512M 0 part /boot/firmware
├─sda2 8:2 0 128G 0 part /
├─sda3 8:3 0 128G 0 part
└─sda4 8:4 0 1.6T 0 part /mnt/ssd1600
sd無し。ssdだけで起動できます。sda3はOSバックアップsda4はDataバックアップ用です。
debianのcockpit-machinesでkvmこれが安定している。これで様子見です。
た+ $ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
nvme0n1 259:0 0 476.9G 0 disk
├─nvme0n1p1 259:1 0 512M 0 part /boot/firmware
├─nvme0n1p2 259:2 0 64G 0 part /
├─nvme0n1p3 259:3 0 64G 0 part
└─nvme0n1p4 259:4 0 348.4G 0 part /mnt/log
こちらは24時間稼働RaspberryPi5+nvme500Gに_Debian12Lite_proxmox8.3.3_OracleLinux8.10_OracleDB23aiFREEをインストール。
MacBookAir(M1)から引っ越しました。遅くない。快適です。
ちょっと
熱い~ $ vcgencmd measure_temp
temp=49.4'C
MacBookAir(M1)ではUTM、RaspberryPiではproxmoxを使うことでOracleDBを稼働させることができた。proxmoxじゃなくてdebian+cockpit-machinesで簡単に導入できたのでこのサイトは封鎖した。
debianではなくubuntuにしてみました。proxmoxじゃなくてcockpit-machinesでkvmです。ubuntuじゃなくてもdebianでできるので封鎖した。