继上回,咱入手了个 NOCIX 的独服,操作系统是 Debian 的 Stretch 版本,本文记录如果从 Debian 安装 Proxmox VE,以及配置 IPv4 和 IPv6 网卡,为硬盘分区。

预配置

系统装好后,从 NOCIX 后台面板取得 登陆用户名 和 密码。

用户名是 customer
密码是一串随机生成的字符串

使用 su 切换到 root 还需要输入密码,这样频繁操作比较麻烦。

免密登陆 root

安装 sudo 实现免密 su

1
2
apt update
apt install -y sudo

修改 /etc/sudoers 文件
注意:只能用 visudo 交互式来修改 sudoers 文件

  1. 这是为了防止被脚本修改,就别想用 echo 来改了
  2. visudo 会验证配置的格式,如果不验证,而你写的配置有问题,那么你无法切换到 root,而只有 root 用户才能修改 sudoer(嘛,死循环了
    1
    visudo

在文件最后加上一行

1
username     ALL=(ALL:ALL) NOPASSWD:ALL

username 是你当前的用户,你想从哪个用户免密切换到 root

在我这里是

1
customer ALL=(ALL:ALL) NOPASSWD:ALL

visudo 命令使用的是 nano 编辑器

所以修改好了后,ctrl+x,y,回车

回到 customer 用户, sudo su,可以免密进入 root ,说明配置好了

开启 bbr

因为内核版本在 4.9 以上,可以直接开启 bbr。

修改系统参数

1
2
echo "net.core.default_qdisc=fq" >> /etc/sysctl.conf
echo "net.ipv4.tcp_congestion_control=bbr" >> /etc/sysctl.conf

应用更改

1
sysctl -p

验证是否开启

1
lsmod | grep bbr

返回信息如下,表示已经开启

1
tcp_bbr                20480  15

安装一些常用工具(可选)

1
apt install -y htop speedtest-cli vim

安装 Proxmox VE

参考官方 wiki:https://pve.proxmox.com/wiki/Install_Proxmox_VE_on_Debian_Stretch

直接从 【 Install Proxmox VE Install 】 这部分开始

复制以下到终端执行

1
2
3
4
5
echo "deb http://download.proxmox.com/debian/pve stretch pve-no-subscription" > /etc/apt/sources.list.d/pve-install-repo.list
wget http://download.proxmox.com/debian/proxmox-ve-release-5.x.gpg -O /etc/apt/trusted.gpg.d/proxmox-ve-release-5.x.gpg
apt -y update && apt -y dist-upgrade
apt install -y proxmox-ve postfix open-iscsi
apt remove os-prober

安装好了后,使用浏览器访问 https://<ip-address>:8006,访问会提示证书不被信任,这是正常的,因为是主机自签名的证书。

我习惯把视图调整为目录视图。

左上角有个下拉框,Folder View.

这里系统是安装完了,但是还需要一些配置.

设置网络

Datacenter - Nodes - node

System - Network

现在服务器是通过具体的硬件网卡来获取 IP 地址接入互联网。

如图:

但是我们需要新建一个桥接网卡,VM 会通过这个桥接网卡来配置 IP 地址,类比桌面环境下用 VMWare 开虚拟机,通过桥接上网之类的。

这里需要先删掉 Network Device 上面的 IP 地址,因为 IP 地址不能同时分配到两张网卡上,所以记下你的 IP 地址和网关,当然,你的服务器后台也应该有这些。

那么,问题来了,删掉后,IP 地址没有配置到网卡上,我们是不是无法访问到这台服务器了呢?会立即断网吗?

放心,网卡配置需要重启才能生效,所以你只需要确保重启前正确配置了网卡。

新建一个 vmbr0.

Create - Linux Bridge 桥接网卡

将 IP 地址配置到桥接网卡上,桥接网卡指向 物理网卡

如果有 IPv6 地址也可以加上。

IPv6 也不是完全没卵用,我们可以用 cf 中转,搞点网站什么的还是可以,就不用再配置一套内网了。

Cloudflare support IPv6 addresses to your origin server, and will accept both IPv4 and IPv6 from clients. via: https://serverfault.com/questions/874387/ipv6-only-server-through-cloudflare-gateway

经测试,Cloudflare Spectrum 也可以配置 IPv6 的源站地址,然后 ssh 连接是 IPv4,同样可以中转。

最后如图,点击 “Create” 保存。

图片下方的 +++ — 是网卡配置文件(/etc/network/interfaces)的 diff。

重启来使更改生效。

重启后,可以正常通过 IPv4 的地址来 ssh,不过 curl ip.sb 返回的是 IPv6 的地址。

硬盘

在开始创建 VM 前,还需要配置一下存储。

服务器硬盘配置

  • SSD: /dev/sda 240G
  • HDD: /dev/sdb 3T

默认安装出来是,VM 需要的系统镜像文件存放目录 /var/lib/vz 在 SSD 里面,这样有点浪费,因为镜像不是经常需要读取的.

SSD 这块硬盘的分区,因为不是直接安装的 Proxmox ,调整分区大小有风险,先保持现状吧.

HDD 的话,我打算 100G 作为镜像存放(完全够了吧),剩下的作为 VM 的存储。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
root@s163941:/home/customer# lvs
LV VG Attr LSize Pool Origin Data% Meta% M ove Log Cpy%Sync Convert
base-9000-disk-0 hdd Vri---tz-k 20.00g vm-data
vm-100-disk-0 hdd Vwi---tz-- 200.00g vm-data
vm-101-cloudinit hdd Vwi---tz-- 4.00m vm-data
vm-101-disk-0 hdd Vwi---tz-- 100.00g vm-data
vm-102-cloudinit hdd Vwi---tz-- 4.00m vm-data
vm-102-disk-0 hdd Vwi---tz-- 100.00g vm-data
vm-9000-cloudinit hdd Vwi---tz-- 4.00m vm-data
vm-data hdd twi---tz-- 2.60t
vz hdd twi---tz-- 100.00g
root s163941-vg -wi-ao---- 199.34g
swap_1 s163941-vg -wi-ao---- 23.99g
root@s163941:/home/customer# vgs
VG #PV #LV #SN Attr VSize VFree
hdd 1 9 0 wz--n- 2.73t 31.84g
s163941-vg 1 2 0 wz--n- 223.33g 0

运行 lvsvgs 发现之前的 VM 硬盘 还在,fdisk 格式化一下

看来 nocix 后台的 wipe hard disk 没起作用

1
fdisk /dev/sdb

m 可以查看帮助菜单

输入 p 回车,d 回车,w 回车

命令说明:
p 打印分区
d 删除分区
w 写入更改

过程如下:

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
Command (m for help): p
Disk /dev/sdb: 2.7 TiB, 3000592982016 bytes, 5860533168 sectors
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: FD775806-E159-461E-9BF0-320C987B0796

Device Start End Sectors Size Type
/dev/sdb1 2048 5860533134 5860531087 2.7T Linux filesystem

Command (m for help): d
Selected partition 1
Partition 1 has been deleted.

Command (m for help): p
Disk /dev/sdb: 2.7 TiB, 3000592982016 bytes, 5860533168 sectors
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: FD775806-E159-461E-9BF0-320C987B0796

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

创建 volumn group

参考官方 wiki:https://pve.proxmox.com/wiki/Logical_Volume_Manager_(LVM)#_creating_a_volume_group

第二块硬盘的 volumn group 名字叫 hdd。

1
2
3
4
5
6
7
8
9
root@s163941:/home/customer# sgdisk -N 1 /dev/sdb

The operation has completed successfully.

root@s163941:/home/customer# pvcreate --metadatasize 250k -y -ff /dev/sdb1
Physical volume "/dev/sdb1" successfully created.

root@s163941:/home/customer# vgcreate hdd /dev/sdb1
Volume group "hdd" successfully created

这是之前那台独服的配置

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

root@Server:~# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 543.9G 0 disk
├─sda1 8:1 0 1M 0 part
├─sda2 8:2 0 256M 0 part
└─sda3 8:3 0 543.7G 0 part
├─pve-swap 253:0 0 8G 0 lvm [SWAP]
├─pve-root 253:1 0 96G 0 lvm /
├─pve-data_tmeta 253:2 0 4.2G 0 lvm
│ └─pve-data-tpool 253:4 0 415.2G 0 lvm
│ ├─pve-data 253:5 0 415.2G 0 lvm
│ ├─pve-vm--100--disk--0 253:6 0 100G 0 lvm
│ ├─pve-vm--102--disk--1 253:7 0 30G 0 lvm
│ ├─pve-vm--103--disk--1 253:8 0 30G 0 lvm
│ ├─pve-vm--101--disk--0 253:9 0 50G 0 lvm
│ └─pve-vm--104--disk--0 253:10 0 32G 0 lvm
└─pve-data_tdata 253:3 0 415.2G 0 lvm
└─pve-data-tpool 253:4 0 415.2G 0 lvm
├─pve-data 253:5 0 415.2G 0 lvm
├─pve-vm--100--disk--0 253:6 0 100G 0 lvm
├─pve-vm--102--disk--1 253:7 0 30G 0 lvm
├─pve-vm--103--disk--1 253:8 0 30G 0 lvm
├─pve-vm--101--disk--0 253:9 0 50G 0 lvm
└─pve-vm--104--disk--0 253:10 0 32G 0 lvm
sr0 11:0 1 1024M 0 rom
root@Server:~#

我想要配置成这样,镜像存储和 VM 的存储在同一个硬盘上面。

参考:https://pve.proxmox.com/wiki/Logical_Volume_Manager_(LVM)#_creating_an_extra_lv_for_tt_span_class_monospaced_var_lib_vz_span_tt

后续简写说明:
vg -> volumn group
lv -> logic volumn

创建镜像文件存储

在 hdd 的 vg 里面创建 100G 大小的 lv,lv 名叫 vz.

1
lvcreate -L 100G -n vz hdd

转换为 thin-pool

1
lvconvert --type thin-pool hdd/vz

过程如下:

1
2
3
4
5
6
7
8
9
root@s163941:/home/customer# lvcreate -L 100G -n vz hdd
WARNING: ext4 signature detected on /dev/hdd/vz at offset 1080. Wipe it? [y/n]: y
Wiping ext4 signature on /dev/hdd/vz.
Logical volume "vz" created.
root@s163941:/home/customer# lvconvert --type thin-pool hdd/vz
WARNING: Converting logical volume hdd/vz to thin pool's data volume with metadata wiping.
THIS WILL DESTROY CONTENT OF LOGICAL VOLUME (filesystem etc.)
Do you really want to convert hdd/vz? [y/n]: y
Converted hdd/vz to thin pool.

格式化 vz 分区为 ext4

1
mkfs.ext4 /dev/hdd/vz

将 vz 分区挂载到 /var/lib/vz,因为/var/lib/vz目录存在且非空,所以需要删掉。

先看看这个的目录结构:

1
2
3
4
5
6
7
8
|-- dump
|-- images
|-- private
|-- snippets
`-- template
|-- cache
|-- iso
`-- qemu

通过 /etc/fstab 来挂载,避免重启后配置丢失。

实测,删除前不用备份这个目录,因为挂载后,目录结构会回来的。

命令如下

1
2
3
4
rm -r /var/lib/vz
echo '/dev/hdd/vz /var/lib/vz ext4 defaults 0 2' >> /etc/fstab
cat /etc/fstab
mount -a

最后一个命令执行完成没有任何回显,说明成功了。

通过 df -h 验证:

1
2
3
4
5
6
7
8
9
10
11
12
root@s163941:~/vz.bak# df -h
Filesystem Size Used Avail Use% Mounted on
udev 12G 0 12G 0% /dev
tmpfs 2.4G 9.1M 2.4G 1% /run
/dev/mapper/s163941--vg-root 196G 1.9G 184G 2% /
tmpfs 12G 46M 12G 1% /dev/shm
tmpfs 5.0M 0 5.0M 0% /run/lock
tmpfs 12G 0 12G 0% /sys/fs/cgroup
/dev/sda1 236M 82M 142M 37% /boot
/dev/fuse 30M 16K 30M 1% /etc/pve
tmpfs 2.4G 0 2.4G 0% /run/user/1000
/dev/mapper/hdd-vz 98G 61M 93G 1% /var/lib/vz

最后一行,可以看到已经挂载好了,size 因为计算的问题,和 100G 有些许出入

剩下的是 VM 的存储分区。

创建 VM 存储分区

需要确定我们配置的存储类型,因为时间有限,之前那台独服用的是 LVM-Thin,新的这台也考虑使用 LVM-Thin,还有一种是 LVM。

LVM 和 LVM-Thin 的区别如下:

参考:https://pve.proxmox.com/wiki/LVM2#LVM_vs_LVM-Thin

Type Content types Image formats Shared Snapshots Clones
LVM images,rootdir raw possible no no
LVM-Thin images,rootdir raw no yes yes

可以看到,LVM-Thin 支持快照和克隆,但是不能共享了,没事,我不需要共享给别的节点,我没用集群。

但是添加 LVM 和 添加 LVM-Thin 的步骤都记录下。

如果是添加 LVM

如果是要添加 LVM,只需要到 Datacenter - Storage
点击 Add:LVM

1
2
3
Base storage: Existing volumn groups
Volumn group: hdd
ID: 随便取名

这样添加后,容量是 hdd 的容量, 2.73T , 但是会显示已经占用了 100G。

Usage 3.59% (100.20 GiB of 2.73 TiB)

如果是添加 LVM-Thin

添加 LVM-Thin 会相对有点麻烦。

需要指定容量,末尾还要留点容量,因为 convert 到 thin-pool 后需要占用少量空间来存放一些元数据 metadata,2 MB,但这个容量不会从你创建的 lv 中去获取,所以这个容量要留有,分区不能全部划完。

1
2
3
4
root@s163941:/var/lib/vz/template/iso# vgs
VG #PV #LV #SN Attr VSize VFree
hdd 1 1 0 wz--n- 2.73t 2.63t
s163941-vg 1 2 0 wz--n- 223.33g 0

vgs 看到剩余容量是 2.63T,我也指定 2.63T,实际上也留有一部分小数.

从名为 hdd 的 vg 中创建大小为 2.63T,名字叫 vm-data 的 lv.

1
lvcreate -L 2.63T -n vm-data hdd

将 hdd 中的 vm-data 转换的 thin-pool

1
lvconvert --type thin-pool hdd/vm-data

上述命令的过程如下:

1
2
3
4
5
6
7
8
9
10
11
root@s163941:/var/lib/vz/template/iso# lvcreate -L 2.63T -n vm-data hdd
Rounding up size to full physical extent 2.63 TiB
WARNING: ext4 signature detected on /dev/hdd/vm-data at offset 1080. Wipe it? [y/n]: y
Wiping ext4 signature on /dev/hdd/vm-data.
Logical volume "vm-data" created.
root@s163941:/var/lib/vz/template/iso# lvconvert --type thin-pool hdd/vm-data
WARNING: Converting logical volume hdd/vm-data to thin pool's data volume with metadata wiping.
THIS WILL DESTROY CONTENT OF LOGICAL VOLUME (filesystem etc.)
Do you really want to convert hdd/vm-data? [y/n]: y
WARNING: Pool zeroing and large 2.00 MiB chunk size slows down provisioning.
Converted hdd/vm-data to thin pool.

然后到面板,Datacenter - Storage
点击 Add:LVM-Thin

如图配置

点击 Add,即可保存。

这样就算完成了。

运行 lvsvgspvslsblk 结果如下:

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
root@s163941:/home/customer# lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
vm-data hdd twi-aotz-- 2.63t 0.21 10.51
vz hdd twi-aotz-- 100.00g 0.00 10.43
root s163941-vg -wi-ao---- 199.34g
swap_1 s163941-vg -wi-ao---- 23.99g

root@s163941:/home/customer# vgs
VG #PV #LV #SN Attr VSize VFree
hdd 1 4 0 wz--n- 2.73t 1.11g
s163941-vg 1 2 0 wz--n- 223.33g 0

root@s163941:/home/customer# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 1 223.6G 0 disk
|-sda1 8:1 1 243M 0 part /boot
|-sda2 8:2 1 1K 0 part
`-sda5 8:5 1 223.3G 0 part
|-s163941--vg-root 253:0 0 199.3G 0 lvm /
`-s163941--vg-swap_1 253:1 0 24G 0 lvm [SWAP]
sdb 8:16 1 2.7T 0 disk
`-sdb1 8:17 1 2.7T 0 part
|-hdd-vz_tmeta 253:2 0 100M 0 lvm
| `-hdd-vz 253:4 0 100G 0 lvm /var/lib/vz
|-hdd-vz_tdata 253:3 0 100G 0 lvm
| `-hdd-vz 253:4 0 100G 0 lvm /var/lib/vz
|-hdd-vm--data_tmeta 253:5 0 88M 0 lvm
| `-hdd-vm--data-tpool 253:7 0 2.6T 0 lvm
| |-hdd-vm--data 253:8 0 2.6T 0 lvm
`-hdd-vm--data_tdata 253:6 0 2.6T 0 lvm
`-hdd-vm--data-tpool 253:7 0 2.6T 0 lvm
|-hdd-vm--data 253:8 0 2.6T 0 lvm

root@s163941:/home/customer# pvs
PV VG Fmt Attr PSize PFree
/dev/sda5 s163941-vg lvm2 a-- 223.33g 0
/dev/sdb1 hdd lvm2 a-- 2.73t 1.11g

最后没切完,留了 1.11g,不过不影响。