Могу ли я получить информацию из других файловых систем из оверлеев? - PullRequest
0 голосов
/ 11 марта 2020

Можете ли вы решить проблему незнания информации inode при изменении пути upperdir в overlayfs?

После изменения пути upperdir:

root@bcd0d4e391f8:~/myDir# ls -i   
ls: cannot access 'ssd.c': No such file or directory  
ls: cannot access 'ssd.abc': No such file or directory  
? ssd.abc  ? ssd.c

* Путь upperdir был изменен путем изменения кода overlayfs.


* Исходный код

static int ovl_create_upper(struct dentry *dentry, struct inode *inode,
            struct ovl_cattr *attr){    

    struct dentry *upperdir = ovl_dentry_upper(dentry->d_parent);
    struct inode *udir = upperdir->d_inode;
    struct dentry *newdentry;
    int err;

    newdentry = ovl_create_real(udir,
                lookup_one_len(dentry->d_name.name,
                       upperdir,
                       dentry->d_name.len),
                attr);

* Пример кода исправления

static int ovl_create_upper(struct dentry *dentry, struct inode *inode,
            struct ovl_cattr *attr){
     struct dentry *upperdir = ovl_dentry_upper(dentry->d_parent);
     struct inode *udir = upperdir->d_inode;
     struct dentry *newdentry;
     int err;
     extern struct qsh_metadata qsh_mt; //HOON  

     newdentry = ovl_create_real(qsh_mt.qsh_dentry->d_inode,
            lookup_one_len(dentry->d_name.name,
                    qsh_mt.qsh_dentry,
                    dentry->d_name.len),
                attr);

* В приведенном выше код, я заменил верхнюю часть диска на нужный диск и смонтированный объект dentry. * extern struct qsh_metadata qsh_mt; => Код, который я добавил

ex) struct dentry upperdir = qsh_dentry;
docker базовое монтирование: / dev / sda
qsh_dentry: монтирование / dev / sdb

...