3

Я пытаюсь использовать Vagrant + VirtualBox для создания проекта на основе Yocto . Процесс сборки прерывается до начала компиляции, потому что он проверяет работоспособность дискового пространства и inode. Похоже, что монтирования vboxfs показывают только 1k свободных инодов (что является порогом PANIC Yocto)

vagrant@vagrant-ubuntu-trusty-64:/vagrant$ df -ih
Filesystem     Inodes IUsed IFree IUse% Mounted on
/dev/sda1        2.5M   88K  2.5M    4% /
none             975K     2  975K    1% /sys/fs/cgroup
udev             974K   401  973K    1% /dev
tmpfs            975K   322  975K    1% /run
none             975K     1  975K    1% /run/lock
none             975K     1  975K    1% /run/shm
none             975K     2  975K    1% /run/user
vagrant          1000     0  1000    0% /vagrant

Я могу rsync общего каталога в ВМ или проверить код, но это сводит на нет преимущества Vagrant. Можно ли настроить параметры монтирования vboxfs , чтобы в нем было больше inode?

редактировать

Изменение файла конфигурации для изменения порогов паники, похоже, сработало. На самом деле есть два уровня проверки. Уровень "STOP" и уровень "ABORT". По умолчанию "STOP" установлен на 100 000 инодов. Изменение STOP и ABORT на 999 inode позволяет продолжить сборку, но я не уверен, что это вызовет другие проблемы в будущем.

1 ответ1

4

К сожалению, нет простого решения. Значение жестко закодировано в src/VBox/Additions/linux/sharedfolders/utils.c:

int sf_get_volume_info(struct super_block *sb, STRUCT_STATFS *stat)
{
    struct sf_glob_info *sf_g;
    SHFLVOLINFO SHFLVolumeInfo;
    uint32_t cbBuffer;
    int rc;

    sf_g = GET_GLOB_INFO(sb);
    cbBuffer = sizeof(SHFLVolumeInfo);
    rc = VbglR0SfFsInfo(&client_handle, &sf_g->map, 0, SHFL_INFO_GET | SHFL_INFO_VOLUME,
                        &cbBuffer, (PSHFLDIRINFO)&SHFLVolumeInfo);
    if (RT_FAILURE(rc))
        return -RTErrConvertToErrno(rc);

    stat->f_type        = NFS_SUPER_MAGIC; /* XXX vboxsf type? */
    stat->f_bsize       = SHFLVolumeInfo.ulBytesPerAllocationUnit;
    stat->f_blocks      = SHFLVolumeInfo.ullTotalAllocationBytes
                        / SHFLVolumeInfo.ulBytesPerAllocationUnit;
    stat->f_bfree       = SHFLVolumeInfo.ullAvailableAllocationBytes
                        / SHFLVolumeInfo.ulBytesPerAllocationUnit;
    stat->f_bavail      = SHFLVolumeInfo.ullAvailableAllocationBytes
                        / SHFLVolumeInfo.ulBytesPerAllocationUnit;
    stat->f_files       = 1000;
    stat->f_ffree       = 1000; /* don't return 0 here since the guest may think
                                 * that it is not possible to create any more files */
    stat->f_fsid.val[0] = 0;
    stat->f_fsid.val[1] = 0;
    stat->f_namelen     = 255;
    return 0;
}

Конечно, если вы хотите скомпилировать модуль ядра Shared Folders самостоятельно (это должно быть очень просто), вы можете легко изменить эти значения на что-то более высокое.

Чтобы собрать модули ядра, загрузите соответствующее дерево исходного кода VirtualBox и выполните в его корне следующие команды:

./configure --only-additions

После того, как вы добились успеха (указав, что все зависимости установлены), вы сможете следовать инструкциям на экране. К сожалению, я столкнулся с ошибкой GCC, я буду исследовать больше завтра.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .