Заготовка исправления для использования Ceph-хранилища для виртуальных машин (ВМ) в кластере Proxmox Virtual Environment (PVE). Загружу код в Bugzilla тоже (нужно будет проверить Development guideline тоже), и буду работать над ZFS хранилищем тоже, скоро; так как это еще одна популярная конфигурация в кластере PVE, делюсь, если кому интересно, если хотите использовать и если хотите оставить отзыв.
**Введение:**
Этот документ предоставляет пошаговые инструкции по реализации заготовки исправления для использования Ceph-хранилища в кластере Proxmox Virtual Environment (PVE). В частности, это исправление решает проблему отображения использования диска загрузочного диска для виртуальных машин (ВМ), включая пространство снимков, в конфигурации Ceph-хранилища.
**Процедура:**
1. **Создайте резервную копию оригинального Perl-файла:** Прежде чем вносить какие-либо изменения, крайне важно создать резервную копию оригинального Perl-файла для безопасности.
```bash
cp /usr/share/perl5/PVE/QemuServer.pm /opt/QemuServer-original-`date +%Y-%m-%d-%s`.pm
```
2. **Отредактируйте Perl-файл:** Откройте Perl-файл для редактирования. Вы можете использовать любой текстовый редактор, но мы будем использовать пример использования редактора `vi`.
```bash
vi /usr/share/perl5/PVE/QemuServer.pm
```
Внутри редактора найдите строку, содержащую "{disk}" (примерно на строке 2944).
3. **Измените Perl-код:** Вы увидите следующий блок кода:
```perl
my $size = PVE::QemuServer::Drive::bootdisk_size($storecfg, $conf);
if (defined($size)) {
$d->{disk} = 0; # no info available
$d->{maxdisk} = $size;
} else {
$d->{disk} = 0;
$d->{maxdisk} = 0;
}
```
После строки комментария "# no info available" добавьте следующий код для получения информации об использовании диска из Ceph-пула для ВМ:
```perl
##### CODE TO FETCH VM DISK USAGE FROM CEPH POOL START #####
my @bootdiskorder = split('=', $conf->{boot});
my @bootdiskname = split(';', $bootdiskorder[1]);
my @bootdiskinfo = split(",", $conf->{$bootdiskname[0]});
my @bootdiskdetail = split(":", $bootdiskinfo[0]);
my $bootdiskstorage = $bootdiskdetail[0];
my $bootdiskimage = $bootdiskdetail[1];
if (defined $storecfg->{ids}->{$bootdiskstorage}->{type}) {
my $bootdisktype = $storecfg->{ids}->{$bootdiskstorage}->{type};
my $bootdiskpool = $storecfg->{ids}->{$bootdiskstorage}->{pool};
if ($bootdisktype eq "rbd") {
my $cephrbddiskinfocmd = "rbd disk-usage -p " . $bootdiskpool . " " . $bootdiskimage . " --format=json";
my $cephrbddiskinfo = `$cephrbddiskinfocmd`;
$cephrbddiskinfo =~ s/\n/""/eg;
$cephrbddiskinfo =~ s/\r/""/eg;
$cephrbddiskinfo =~ s/\t/""/eg;
$cephrbddiskinfo =~ s/\0/""/eg;
$cephrbddiskinfo =~ s/^[a-zA-z0-9,]//g;
my $total_used_size = 0;
if ($cephrbddiskinfo =~ /$bootdiskimage/) {
my $cephrbddiskinfoarray = decode_json($cephrbddiskinfo);
foreach my $image (@{$cephrbddiskinfoarray->{'images'}}) {
if (defined $image->{'used_size'}) {
$total_used_size += $image->{'used_size'};
}
}
$d->{disk} = $total_used_size;
}
}
}
##### CODE TO FETCH VM DISK USAGE FROM CEPH POOL END #####
```
4. **Перезапустите службу `pvestatd`:** После внесения необходимых изменений перезапустите службу `pvestatd`, чтобы применить изменения.
```bash
systemctl restart pvestatd.service
```
5. **Проверьте наличие ошибок:** Отслеживайте системные журналы для выявления возможных ошибок, чтобы убедиться, что изменения были применены без проблем.
```bash
tail -f /var/log/syslog
```
6. **Проверьте использование диска:** Если все работает правильно, то теперь вы должны видеть использование диска, включая использование загрузочного диска и процент использованного пространства, для ВМ, когда они находятся в состоянии "ON".
Надеюсь, это поможет кому-нибудь, и мы получим обратную связь. Заранее спасибо.
-Deepen.