2

インテルのホワイト ペーパーでは、次のように述べています。

Linux の MD RAID は、ext2 ファイル システムなどの Linux ファイル システム ドライバーと、AHCI ドライバーや SAS ドライバーなどの低レベルのハード ディスク ドライバーの間でデータをフィルター処理するブロック ドライバーです。

カーネルコードdrivers/md/md.cでは、これしか見つかりませんfile_operations:

static const struct file_operations md_seq_fops = {
    .owner          = THIS_MODULE,
    .open           = md_seq_open,
    .read           = seq_read,
    .llseek         = seq_lseek,
    .release        = seq_release_private,
    .poll           = mdstat_poll,

};

md_fops には読み取りも書き込みもありません:

static const struct block_device_operations md_fops =
{
        .owner          = THIS_MODULE,
        .open           = md_open,
        .release        = md_release,
        .ioctl          = md_ioctl,
#ifdef CONFIG_COMPAT
        .compat_ioctl   = md_compat_ioctl,
#endif
        .getgeo         = md_getgeo,
        .media_changed  = md_media_changed,
        .revalidate_disk= md_revalidate,
};

これは、MD ドライバーが実行する file_operations を開く、読み取る... ですか? MD ドライバーはどのようにデータを書き込みますか? AHCI ドライバーを使用しますか?

write syscall が呼び出されたとき、データを書き込む手順は何ですか?

sys_write -> vfs_write -> file->f_op->write または do_sync_write? md_seq_fops には write も aio_write もありません

4

2 に答える 2