Win11这个右键之后还要【显示更多选项】实在是让人费解. 参考以下方法恢复至原来的右键菜单行为:
Win+X, A 打开终端 (powershell也可以)
1 | reg.exe add "HKCU\Software\Classes\CLSID\{86ca1aa0-34aa-4e8b-a509-50c905bae2a2}\InprocServer32" /f /ve |
其中第二步和第三步也可以通过任务管理器来重启【Windows资源管理器】
注意:请务必做好数据备份,本文的前提是对Proxmox中的VM操作, 利用了PVE的备份和还原能力.
创建一个一样大小的硬盘并挂载到VM.
选择一个live系统,这里我们选择 Ubuntu Desktop 24.04.1 LTS
将live盘设置为启动盘,启动系统,选择 Try Ubuntu 进入 live 环境
由于我原来的LVM系统盘有三个分区 1M, 1G的/boot, 199G的lvm数据分区,所以需要先拷贝系统,再把boot部分的补上, 具体操作如下:
1 | ... |
切换至root用户 sudo su
由于是live系统不需要输入密码
创建几个mount点:
1 | mkdir /mnt/src |
初始化新磁盘(这里 /dev/sda是原来的磁盘, /dev/sdb 是新的磁盘)
1 | gdisk /dev/sdb |
如果原来的磁盘不是GPT格式可以尝试如下命令:
1 | fdisk /dev/sdb |
在新的磁盘上创建文件系统
1 | mkfs -t ext4 /dev/sdb2 |
挂载磁盘
1 | mount -o ro /dev/sda2 /mnt/srcboot |
安装pv工具以便查看复制进度
1 | apt update && apt install pv |
开始拷贝数据
1 | tar -C /mnt/src --preserve-permissions --xattrs --xattrs-include=*.* --numeric-owner -c . | pv | tar -xf - -C /mnt/dst --preserve-permissions --xattrs --xattrs-include=*.* --numeric-owner |
其中 --perserve-permission
是为了保留权限, 对于 root 用户来说是默认的, 但是为了保险起见还是加上
--xattrs
, --xattrs-include=*.*
启用额外属性支持, 并拷贝全部属性. 这样类似/usr/bin/ping
等文件的 capability 也会被保存下来.
--numeric-owner
要求 tar 使用数字UID/GID 而不是用户名
给新磁盘文件系统下挂载分区
1 | cd /mnt/dst |
修改 /etc/fstab,保证里面 /dev/disk/by-uuid/
对应的磁盘和新磁盘一致. 通过 lsblk -o NAME,uuid
来查看磁盘的uuid
1 | nano /mnt/dstetc/fstab |
切换rootfs,安装grub. 再运行 update-grub
更新 grub 配置
1 | cd /mnt/dst |
退出 chroot, 关闭系统 shutdown now
弹出 live CD 和原来的磁盘 (在PVE中对应remove和detach)
重新启动新的系统,可能会遇到几个问题:
grub 菜单展示了 Ubuntu
但是回车进去报错 you need to load kernel first
这种情况应该是因为当前grub标签 (hd0,gpt2)
跟现实不匹配导致的. (也可能是前面忘记执行了update-grub)
在选择页面按下 c
进入 grub shell
1 | ls -l 确认当前磁盘列表和磁盘的UUID |
此时应该就会进入系统了
/etc/fstab
此时进入新系统后会卡在两个任务上:1 | Reached target .... |
这个没什么好办法,会卡两次,等三分钟就好了。进入系统后记得把 /etc/fstab
改了,运行 sudo grub-install && sudo update-grub
然后再重启应该就没问题了.
Live-cloning a running Linux installation to a new machine
grub error: you need to load kernel first
How do I list my devices in GRUB?
VMware workstation似乎有个bug, 当添加新的SCSI磁盘时VM内不会显示新的 /dev/ 块设备, 例如:
1 | NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS |
此时通过VMware控制台添加一个200G的磁盘, 再运行 lsblk
并不会有任何变化.
需要执行以下脚本”刷新”:
1 | for h in $(ls /sys/class/scsi_host); do |
再运行 lsblk
就可以看到磁盘了:
1 | NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS |
[SOLVED] Virtual Hard Disk is added, but not showing using lsblk -d command
开发机从 Ubuntu Server 20.04.6 升级到 Ubuntu Server 24.04.1 LTS 版本, 没遇到什么大问题. 但是发现 podman
变成了 [installed,local]
版本, 没有被自动升级. 但是看了一下容器,镜像,Volume还在.
我之前用的是kubic社区的podman源, 需要先卸载 sudo apt remove podman
再删除掉apt能识别出来不再需要的依赖: sudo apt autoremove
此时如果直接安装新版本 podman 可能会有问题, 提示 /etc/containers/containers.conf 被包 containers-common
使用.
可以尝试: sudo apt remove containers-common buildah crun
. 卸载前通过 sudo apt list --installed | grep installed,local
确认是否为本地版本.
还是不行的话就只能手动逐个卸载了:
1 | sudo dpkg --remove crun |
总之需要保证之前的版本都卸载掉. 不需要(也不要)运行 purge
. 会丢失数据.
sudo apt install podman golang-github-containernetworking-plugin-dnsname
其中 golang-github-containernetworking-plugin-dnsname
这个不清楚为什么在 Ubuntu 24.04 源里名字这么奇怪, 根据文档来看应该是 podman-plugins
或者 podman-dnsname
才对. Podman 4.x 版本删除了 dnsname
这个插件, 导致通过 compose 拉起的容器组之间不能直接通过 service 名字做寻址.
这个名字是通过 sudo apt search dnsname
找到的.
如果不安装这个包, 可能会看到类似下面的错误:
1 | WARN[0000] Error validating CNI config file /home/kiritow/.config/cni/net.d/wgop-net-wg0.conflist: [failed to find plugin "dnsname" in path [/usr/local/libexec/cni /usr/libexec/cni /usr/local/lib/cni /usr/lib/cni /opt/cni/bin]] |
装完之后在 /usr/lib/cni
下应该会看到 dnsname
插件.
由于Docker Compose V2已经从pip包升级合并到docker
命令了, 因此我们需要使用docker官网提供的docker-compose
独立安装包: Install Compose standalone
注意: 之前提到的 Ubuntu 22.04 里面 containernetworking-plugins
的问题似乎已经解决了, 现在安装 podman
会正确的安装这个依赖包. 参考之前的文章
containers/dnsname: name resolution for containers 这个插件现在已经archive了.
下面的参考没太大价值, 更多感觉还是要看 dnsname
这个插件的文档: Using the dnsname plugin with Podman
Podman network dns option not working with the DNS plugin enabled #20911
Impossible to override container’s DNS with network #17499
sudo vim /etc/fstab
把带有 /swap.img
的一行注释掉, 然后重启 sudo reboot
不想重启的话可以适用这条命令关闭swap sudo swapoff -a
1 | # 安装Containerd |
在root下执行 sudo su
1 | mkdir /etc/containerd/ |
编辑配置文件 vim /etc/containerd/config.toml
修改
1 | ... |
保存后重启服务 sudo systemctl restart containerd
sudo vim /etc/sysctl.d/k8s.conf
1 | net.ipv4.ip_forward=1 |
使其生效: sudo sysctl --system
1 |
|
1 | sudo systemctl enable --now kubelet |
这里的 --pod-network-cidr
需要跟下面的flannel配置一样, flannel默认是 10.244.0.0/16
1 | sudo kubeadm init --pod-network-cidr=10.77.0.0/16 |
看到这个就是创建成功了
1 | Your Kubernetes control-plane has initialized successfully! |
如果需要将其他节点加入到集群内但是忘记复制了安装之后的命令, 可以创建一个新的 bootstrap token, 有效期为1天. 会打印出用于加入集群的命令.
1 | kubeadm token create --print-join-command |
1 | mkdir -p $HOME/.kube |
1 | wget https://github.com/flannel-io/flannel/releases/latest/download/kube-flannel.yml |
查看状态 kubectl get nodes
1 | NAME STATUS ROLES AGE VERSION |
注意 Flannel 在新版Ubuntu Server (24.04)上可能会安装失败, log报错如下:
1 | Failed to check br_netfilter: stat /proc/sys/net/bridge/bridge-nf-call-iptables: no such file or directory |
参考以下方案解决:
1 | modprobe br_netfilter |
1 | curl -L https://istio.io/downloadIstio | sh - |
整合脚本是我在写完前面内容之后一段时间才整理出来的, 因为一直忙活GKE所以忘了整本地的集群. 这里面的版本可能跟前文的不太一样.
这个脚本需要在所有节点上运行. 创建集群, 加入集群命令不一样就不放到这里了.
1 | #!/bin/bash |
注意, PVE环境下如果图省事用Clone VM创建更多节点, 需要使用这样一个脚本来确保Clone出来的机器能够正常使用. 需要在上面的脚本之前执行并重启. 参考 Proxmox如何完整的复制一个VM
1 | set -xe |
Creating a cluster with kubeadm
Fix sysctl: cannot stat /proc/sys/net/bridge/bridge-nf-call-iptables.
Ava Max - Salt (Lyrics) oh, oh oh oh oh oh↑ I’m all out of salt, I’m not gonna cry
Kelly Clarkson - Stronger (What Doesn’t Kill You) [Official Video]
突然的自我 伍佰AndChinaBlue ♫「等不完守候,如果仅有此生 又何用待从头」♫ 動態歌詞Lyrics Music ♫ White_Lyric
谭咏麟 - 卡拉永远Ok『不想归去挂念你 对影只得我自己』【動態歌詞Lyrics】
Press Play Walk Away - S3RL & Synthwulf Laptop DJ
Will Sparks - Untouchable (feat. Aimee Dalton) [Official Music Video]
Blasterjaxx & Marnik - Heart Starts to Beat (Official Music Video)
《苹果香》狼戈 (哈族民歌) Apple Scent - Langge 六星街里还传来, 巴扬琴声吗
最近在阿里轻量云买了一些机器, 同样都是1C/0.5G, Ubuntu 20.04 的机器运行非常正常, Ubuntu 22.04 的机器却隔一段时间就没有响应了. 具体表现为能ping通, 但是ssh登录会超时失败, 宿主机监控CPU/磁盘IO大涨. 登录VNC能看到类似这样的提示:
1 | [44211.553196] Out of memory: Killed process 95466(apt-check) ... shmem-rss:0KB, UID:0 pgtables:300KB dom_score_adj:0 |
而这台机器已经关闭了apt自动更新, 一番搜索之后发现snapd可能会引起这个问题:
snap list
1 | Name Version Rev Tracking Publisher Notes |
1 | sudo snap remove --purge lxd |
1 | sudo apt remove snapd |
sudo vim /etc/apt/preferences.d/nosnap.pref
1 | Package: snapd |
sudo apt clean && sudo apt update
在完全删除掉snapd之后, 目前机器已经正常运行了两三天…
后来发现还是不太行, 解决方案是给这个内存超级小的机器加上Swap. 因为阿里云没创建swap, 而且还把swappiness设置成了0! 为防止奇怪的事情发生, 弄成crontab脚本每分钟跑一下好了.
创建并启用swap
1 | dd if=/dev/zero of=/swap.img bs=1M count=1024 |
添加分钟级任务 sudo crontab -e
1 | @reboot swapon -s | grep -q swap || swapon /swap.img |
Terminate unattended-upgrades or whatever is using apt in ubuntu 18.04 or later editions
How to Remove Snap Packages in Ubuntu Linux
How do I configure swappiness?
How to read oom-killer syslog messages?
How can I check if swap is active from the command line?
Linux Partition HOWTO: 9. Setting Up Swap Space
How to Clear RAM Memory Cache, Buffer and Swap Space on Linux
设备是HP Ultrium 6-SCSI, 使用LTO-6磁带进行备份, 磁带空间大约为2TB
安装 mt-st
工具管理磁带
1 | sudo mt -f /dev/nst0 status |
返回大概是这样的
1 | SCSI 2 tape drive: |
tar工具备份出来的tar包没有对文件顺序有明确的要求, 最终顺序由 readdir 决定, 某些情况下可能不符合要求, 可以提前生成一个文件列表提供给tar.
1 | find tobackupdirname -print0 | sort -z > /tmp/filelist.txt |
如果等待tar打包的文件总大小超过了磁带总大小, 需要启用MultiVolume支持 (建议在tmux内执行保证复制不会中断)
1 | sudo tar -cvf /dev/nst0 -M --no-recursion --null -T /tmp/filelist.txt |
这样tar就会在空间写满的时候提示换盘:
1 | ... |
更换磁盘后回车, tar就会继续进行备份了
当然也可以尝试使用LTFS进行数据的备份, 此处不再赘述.
有一台很久之前创建的Windows VM, 使用OVMF UEFI作为引导, 但是主盘是通过IDE挂载的, 而且因为系统没有安装Virtio驱动所以直接改为SCSI挂载会报错 INACCESSABLE_BOOT_DEVICE. 换成SATA也是一样的.
一番搜索后找到了一个靠谱的答案:
dir C:\
, dir D:\
之类的命令确定当前系统盘和Virtio驱动盘.dism /image:C:\ /add-driver /driver:E:\vioscsi\w10\amd64
wpeutil shutdown -s
整个流程走下来之后VM顺利更换掉了IDE磁盘. 同时我还升级了Machine的定义, 目前暂时没看到什么异常.
Change disk type (IDE/SATA to SCSI) for existing Windows machine
PVE 8.2.4 ISO安装, 由于同一台机器上其他的磁盘上原来已经安装了 PVE 7.4 所以安装过程中提示是否要rename到pve-OLD
而且不能跳过.
安装之后原来磁盘上的PVE会被保留, 但这也造成了我们没法把原来的磁盘用作其他用途 (Disk Manage会报错占用了, 没法Wipe Disk
)
参考以下步骤删除掉 pve-OLD
删除lv
1 | lvdisplay |
删除vg
1 | vgdisplay |
删除pv
1 | pvdisplay |
这样原来的磁盘就可以用作其他用途了.