[freebsd] releng/13.1 issues as vbox-6.1 guest

Anton Saietskii vsasjason at gmail.com
Thu Jul 7 18:23:54 EEST 2022


Приветствую,
Пока тут тестировал сабж, наткнулся на пару неприятных моментов и
хотел бы поделиться -- вдруг кому полезно будет.


** Проблема №1:
После установки emulators/virtualbox-ose-additions при запуске
виртуалки системная дата устанавливается на 2299-й год. Это не зависит
от настройки "hw clock in utc" (ещё бы, тут проблема не просто в
часовом поясе...)
Синхронизация времени выполняется с помощью vboxservice, который
находится достаточно далеко от начала rcorder, из-за чего некоторые
важные файлы имеют дату в далёком будущем, т.к. изменяются во время
загрузки перед запуском vboxservice.
Я не проверял, станет ли системная дата опять нормальной, если снести
пакет, а из конфига виртуалки вычистить все свойства, которые
устанавливаются guest additions. Вместо этого решил закостылить так:

$ cat /etc/rc.d/save_time
#! /bin/sh

# KEYWORD: nojail shutdown

. /etc/rc.subr

name=save_time
rcvar=save_time_enable

start_cmd="${name}_start"
stop_cmd="${name}_stop"

load_rc_config $name
: ${save_time_enable:=NO}
: ${save_time_file:="/var/db/save_time"}

save_time_start() {
        if [ -r $save_time_file -a -s $save_time_file ]; then
                saved_time=`cat $save_time_file`
                echo "Restoring date/time from $save_time_file as $saved_time"
                date $saved_time
        fi
}

save_time_stop() {
        echo -n "Saving date/time to $save_time_file... "
        date +%Y%m%d%H%M > $save_time_file
        if [ $? -ne 0 ]; then
                warn "cannot save."
        else
                echo "done."
        fi
}

run_rc_command "$1"

То, что системные часы "отстанут" на время, в течение которого
виртуалка была выключена, в принципе, для меня вполне терпимо.
Обнаружилась лишь небольшая неприятность после: cron запускается в
прошлом, т.к. vboxservice по дефолту при своём запуске корректирует
время постепенно, а не моментально. Это решилось включением
соответствующей опции:
$ grep vboxservice_flags /etc/rc.conf
vboxservice_flags="--timesync-set-start"

Готов ловить летящие помидоры и яйца, если вдруг таковые имеются.


** Проблема №2:
Имеется следующая конфигурация дисковой подсистемы:
Контроллер LSI Logic SAS, к нему подключен VDI с опциями nonrotational
и discard (чтобы этот VDI сам ужимался).
Внутри виртуалки: GPT (1M align) -> GELI (4K sectorsize, trim
пропускается) -> ZFS (autotrim=on).
Хост может уходить в S3/S4, никаких специальных действий для виртуалки
при этом не предпринимается.

Через несколько дней внезапно побились контрольные суммы, что
затронуло пяток файлов, в messages было такое:

Jun 24 17:21:36 freebsdvm ZFS[998]: checksum mismatch, zpool=zroot
path=/dev/da0p3.eli offset=3501813760 size=12288
Jun 24 17:21:36 freebsdvm ZFS[1002]: pool I/O failure, zpool=zroot error=97
Jun 24 17:21:36 freebsdvm ZFS[1006]: checksum mismatch, zpool=zroot
path=/dev/da0p3.eli offset=3502202880 size=12288
Jun 24 17:21:36 freebsdvm ZFS[1010]: pool I/O failure, zpool=zroot error=97
Jun 24 17:21:36 freebsdvm ZFS[1014]: checksum mismatch, zpool=zroot
path=/dev/da0p3.eli offset=3502190592 size=12288
Jun 24 17:22:28 freebsdvm ZFS[1028]: pool I/O failure, zpool=zroot error=97
Jun 24 17:22:28 freebsdvm ZFS[1032]: pool I/O failure, zpool=zroot error=97

Недолго думая, я переустановил затронутые пакеты, прогнал scrub да успокоился.
Ещё через несколько дней опять побились контрольные суммы, но это уже
затронуло один файл. Виртуалка начала неистово читать диск, а в
messages я успел прочесть следующее (таких сообщений, как ранее уже не
было):

Jul  4 15:13:40 freebsdvm kernel: [93142] mpt0: request
0xfffffe0005dd7d80:54344 timed out for ccb 0xfffff80018953000
(req->ccb 0xfffff80018953000)
Jul  4 15:13:40 freebsdvm kernel: [93142] mpt0: attempting to abort
req 0xfffffe0005dd7d80:54344 function 0
Jul  4 15:13:40 freebsdvm kernel: [93142] mpt0: abort of req
0xfffffe0005dd7d80:54344 completed
Jul  4 15:13:40 freebsdvm kernel: [93142] mpt0: attempting to abort
req 0xfffffe0005dd7d80:54344 function 0
Jul  4 15:13:40 freebsdvm kernel: [93142] mpt0: abort of req
0xfffffe0005dd7d80:54344 completed

С памятью на хосте всё в порядке. Что это за чудеса были и как вообще
такое дебажить -- я не знаю, но подозреваю, что тут какой-то косяк в
реализации TRIM (а вот со стороны FreeBSD или VirtualBox?) Запускал
руками zpool trim в виртуалке, vboxmanage --modifymedium 'VM disk.vdi'
--compact на хосте -- всё нормально, ничего не бьётся.
Пока сменил тип контроллера на LSI Login SCSI и наблюдаю.


More information about the freebsd mailing list