A pasta compartilhada do VirtualBox tem inodes insuficientes

3

Estou tentando usar o Vagrant + VirtualBox para criar um projeto baseado em Yocto . O processo de compilação é abortado antes de começar a compilar, porque faz uma verificação de sanidade para o espaço em disco e o inode. Parece que vboxfs monta mostra apenas como tendo 1k inodes livres (que é o limite PANIC da 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

Eu posso rsync o diretório compartilhado na VM ou verificar o código, mas esse tipo de nega os benefícios do Vagrant. É possível ajustar as configurações% mount vboxfs para torná-lo mais inodes?

Editar

Modificar o arquivo de configuração para alterar os limites de pânico parece ter funcionado. Na verdade, existem dois níveis de verificação. Um nível "STOP" e um nível "ABORT". Por padrão, "STOP" é definido como 100.000 inodes. Alterar STOP e ABORT para 999 inodes permite que a construção continue, mas não tenho certeza se isso causará outros problemas.

    
por kyork 12.11.2015 / 23:22

1 resposta

4

Infelizmente, não há solução fácil. O valor é codificado em 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;
}

É claro que, se você estiver disposto a compilar o módulo de kernel de Pastas compartilhadas por conta própria (deve ser muito fácil), é possível alterar facilmente esses valores para algo maior.

Para construir os módulos do kernel, baixe a árvore de código-fonte apropriada do VirtualBox e execute os seguintes comandos em sua raiz:

./configure --only-additions

Depois de obter sucesso (indicando que todas as dependências estão instaladas), você deve seguir as instruções na tela. Infelizmente, encontrei um bug do GCC, vou investigar mais amanhã.

    
por 12.11.2015 / 23:59