精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

聊聊磁盤文件系統(三)

存儲 存儲設備
VFS采用了面向對象的設計思路,將一系列概念抽象出來作為對象而存在,它們包含數據的同時也包含了操作這些數據的方法。

[[407591]]

掛載到linux的VFS中

vfs對象

VFS采用了面向對象的設計思路,將一系列概念抽象出來作為對象而存在,它們包含數據的同時也包含了操作這些數據的方法。當然,這些對象都只能用數據結構來表示,而不可能超出C語言的范疇,不過即使在C++里面數據結構和類的區別也僅僅在于類的成員默認私有,數據結構的成員默認公有。VFS主要有如下4個對象類型。

(1)超級塊(struct super_block)。超級塊對象代表一個己安裝的文件系統,存儲該文件系統的有關信息,比如文件系統的類型、大小、狀態等。對基于磁盤的文件系統,這類對象通常存放在磁盤上的特定扇區。對于并非基于磁盤的文件系統(比如基于內存的文件系統sysfs),它們會現場創建超級塊對象并將其保存在內存中。

(2)索引節點(struct inode)。索引節點對象代表存儲設備上的一個實際的物理文件,存儲該文件的有關信息。Linux將文件的相關信息,比如訪問權限、大小、創建時間等信息,與文件本身區分開來。文件的相關信息又被稱為文件的元數據。

(3)目錄項(struct dentry)。目錄項對象描述了文件系統的層次結構,一個路徑的各個組成部分,不管是目錄(VFS將目錄當作文件來處理)還是普通的文件,都是一個目錄項對象。比如,打開文件/home/test/test.c時,內核將為目錄/、home、test和文件test.c都創建一個目錄項對象。

(4)文件(struct file)。文件對象代表已經被進程打開的文件,主要用于建立進程和文件之間的對應關系。它由open()系統調用創建,由close()系統調用銷毀,且僅當進程訪問文件期間存在于內存之中。同一個物理文件可能存在多個對應的文件對象,但其對應的索引節點對象卻是惟一的。

除了上述4個主要對象外,VFS還包含了其他很多對象,比如用于描述各種文件系統類型的struct file_system_type,用于描述文件系統安裝點的struct vfsmount等。

VFS各個對象間的關系不是孤立的,進程描述符的files字段記錄了進程打開的所有文件,這些文件的文件對象指針保存在struct file_struct的fd_array數組里。通過文件的file對象可以獲得它對應的目錄項對象,再由目錄項對象的d_inode字段可以獲得它的inode對象,這樣就建立了文件對象與物理文件之間的關聯。一個文件被打開的時候,它的file對象是使用dentry、inode、vfsmount對象中的信息填充的,比如它對應的文件操作f_op由inode對象的i_fop字段得到。

文件系統的掛載

內核是不是支持某種類型的文件系統,需要我們進行注冊才能知道。例如,咱們的 ext4 文件系統,就需要通過 register_filesystem 進行注冊,傳入的參數是 ext4_fs_type,表示注冊的是 ext4 類型的文件系統。這里面最重要的一個成員變量就是 ext4_mount。記住它,這個我們后面還會用。

  1. 如果一種文件系統的類型曾經在內核注冊過,這就說明允許你掛載并且使用這個文件系統。 
  2. register_filesystem(&ext4_fs_type); 
  3.  
  4. static struct file_system_type ext4_fs_type = { 
  5.   .owner    = THIS_MODULE, 
  6.   .name    = "ext4"
  7.   .mount    = ext4_mount, 
  8.   .kill_sb  = kill_block_super, 
  9.   .fs_flags  = FS_REQUIRES_DEV, 
  10. }; 

ext4文件系統的掛載是通過ext4_mount完成的,后者調用mount_bdev(block device)實現,mount_bdev判斷兩次掛載是否為同一個文件系統的依據是:是否為同一個塊設備(test_bdev_super),也就是同一個塊設備只有一個super_block與之對應,即使掛載多次。

  1. static struct dentry *ext4_mount(struct file_system_type *fs_type, int flags, 
  2.          const char *dev_name, void *data) 
  3.  return mount_bdev(fs_type, flags, dev_name, data, ext4_fill_super); 
  4.  
  5.  
  6. struct dentry *mount_bdev(struct file_system_type *fs_type, 
  7.  int flags, const char *dev_name, void *data, 
  8.  int (*fill_super)(struct super_block *, void *, int)) 
  9.  struct block_device *bdev; 
  10.  struct super_block *s; 
  11.  fmode_t mode = FMODE_READ | FMODE_EXCL; 
  12.  int error = 0; 
  13.  
  14.  
  15.  if (!(flags & MS_RDONLY)) 
  16.   mode |= FMODE_WRITE; 
  17.  
  18.  獲取設備 
  19.  bdev = blkdev_get_by_path(dev_name, mode, fs_type); 
  20.  if (IS_ERR(bdev)) 
  21.   return ERR_CAST(bdev); 
  22.  
  23.  
  24.  /* 
  25.   * once the super is inserted into the list by sget, s_umount 
  26.   * will protect the lockfs code from trying to start a snapshot 
  27.   * while we are mounting 
  28.   */ 
  29.  mutex_lock(&bdev->bd_fsfreeze_mutex); 
  30.  if (bdev->bd_fsfreeze_count > 0) { 
  31.   mutex_unlock(&bdev->bd_fsfreeze_mutex); 
  32.   error = -EBUSY; 
  33.   goto error_bdev; 
  34.  } 
  35.  s = sget(fs_type, test_bdev_super, set_bdev_super, flags | MS_NOSEC, 
  36.    bdev); 
  37.  mutex_unlock(&bdev->bd_fsfreeze_mutex); 
  38.  if (IS_ERR(s)) 
  39.   goto error_s; 
  40.  
  41.  
  42.  if (s->s_root) { 
  43.   if ((flags ^ s->s_flags) & MS_RDONLY) { 
  44.    deactivate_locked_super(s); 
  45.    error = -EBUSY; 
  46.    goto error_bdev; 
  47.   } 
  48.  
  49.  
  50.   /* 
  51.    * s_umount nests inside bd_mutex during 
  52.    * __invalidate_device().  blkdev_put() acquires 
  53.    * bd_mutex and can't be called under s_umount.  Drop 
  54.    * s_umount temporarily.  This is safe as we're 
  55.    * holding an active reference. 
  56.    */ 
  57.   up_write(&s->s_umount); 
  58.   blkdev_put(bdev, mode); 
  59.   down_write(&s->s_umount); 
  60.  } else { 
  61.   s->s_mode = mode; 
  62.   snprintf(s->s_id, sizeof(s->s_id), "%pg", bdev); 
  63.   sb_set_blocksize(s, block_size(bdev)); 
  64.   error = fill_super(s, data, flags & MS_SILENT ? 1 : 0); 
  65.   if (error) { 
  66.    deactivate_locked_super(s); 
  67.    goto error; 
  68.   } 
  69.  
  70.  
  71.   s->s_flags |= MS_ACTIVE; 
  72.   bdev->bd_super = s; 
  73.  } 
  74.  
  75.  
  76.  return dget(s->s_root); 
  77.  
  78.  
  79. error_s: 
  80.  error = PTR_ERR(s); 
  81. error_bdev: 
  82.  blkdev_put(bdev, mode); 
  83. error: 
  84.  return ERR_PTR(error); 

掛載ext4文件系統最終由ext4_fill_super完成,它會讀取磁盤中的ext4_super_block,創建并初始化ext4_sb_info對象,建立它們和super_block的關系。ext4_sb_info的結構如下:

它的實現比較復雜,主要邏輯如下:

ext4_sb_info的建立是在ext4_fill_super函數中完成的,代碼如下:

  1. struct ext4_sb_info { 
  2.  struct buffer_head * s_sbh; /* Buffer containing the super block */ 
  3.  struct ext4_super_block *s_es; /* Pointer to the super block in the buffer */ 
  4.  struct buffer_head **s_group_desc; 
  5. }; 
  6.   
  7. static int ext4_fill_super(struct super_block *sb, void *data, int silent) 
  8.  struct ext4_sb_info *sbi; 
  9.  struct buffer_head *bh; 
  10.  struct ext4_super_block *es = NULL
  11.     //1 
  12.  bh = sb_bread_unmovable(sb, logical_sb_block) 
  13.     //2 
  14.  es = (struct ext4_super_block *) (bh->b_data + offset); 
  15.     sbi->s_sbh = bh; 
  16.  sbi->s_es = es; 
  17.  sb->s_fs_info = sbi; 
  18.  sbi->s_sb = sb; 
  19.     //3 
  20.     blocks_count = (ext4_blocks_count(es) - 
  21.    le32_to_cpu(es->s_first_data_block) + 
  22.    EXT4_BLOCKS_PER_GROUP(sb) - 1); 
  23.  do_div(blocks_count, EXT4_BLOCKS_PER_GROUP(sb)); 
  24.  sbi->s_groups_count = blocks_count; 
  25.  sbi->s_blockfile_groups = min_t(ext4_group_t, sbi->s_groups_count, 
  26.    (EXT4_MAX_BLOCK_FILE_PHYS / EXT4_BLOCKS_PER_GROUP(sb))); 
  27.  db_count = (sbi->s_groups_count + EXT4_DESC_PER_BLOCK(sb) - 1) / 
  28.      EXT4_DESC_PER_BLOCK(sb); 
  29.  sbi->s_group_desc = ext4_kvmalloc(db_count * 
  30.        sizeof(struct buffer_head *), 
  31.        GFP_KERNEL); 
  32.   for (i = 0; i < db_count; i++) { 
  33.   block = descriptor_loc(sb, logical_sb_block, i); 
  34.   sbi->s_group_desc[i] = sb_bread_unmovable(sb, block); 
  35.     } 
  36.     //4 
  37.     if (!ext4_check_descriptors(sb, logical_sb_block, &first_not_zeroed)) { 
  38.   ret = -EFSCORRUPTED; 
  39.   goto error; 
  40.  } 
  41.     //5 
  42.     root = ext4_iget(sb, EXT4_ROOT_INO); 
  43.     //6 
  44.     if (ext4_setup_super(sb, es, sb->s_flags & MS_RDONLY)) 
  45.   sb->s_flags |= MS_RDONLY; 
  46.  
  47.  if (sbi->s_inode_size > EXT4_GOOD_OLD_INODE_SIZE) { 
  48.   sbi->s_want_extra_isize = sizeof(struct ext4_inode) - 
  49.            EXT4_GOOD_OLD_INODE_SIZE; 
  50.   if (ext4_has_feature_extra_isize(sb)) { 
  51.    if (sbi->s_want_extra_isize < 
  52.        le16_to_cpu(es->s_want_extra_isize)) 
  53.     sbi->s_want_extra_isize = 
  54.      le16_to_cpu(es->s_want_extra_isize); 
  55.    if (sbi->s_want_extra_isize < 
  56.        le16_to_cpu(es->s_min_extra_isize)) 
  57.     sbi->s_want_extra_isize = 
  58.      le16_to_cpu(es->s_min_extra_isize); 
  59.   } 
  60.     ext4_set_resv_clusters(sb); 
  61.     err = ext4_setup_system_zone(sb); 
  62.     ext4_ext_init(sb); 
  63.  err = ext4_mb_init(sb); 
  64.     block = ext4_count_free_clusters(sb); 
  65.  ext4_free_blocks_count_set(sbi->s_es,  
  66.        EXT4_C2B(sbi, block)); 
  67.  err = percpu_counter_init(&sbi->s_freeclusters_counter, block, 
  68.       GFP_KERNEL); 
  69.  if (!err) { 
  70.   unsigned long freei = ext4_count_free_inodes(sb); 
  71.   sbi->s_es->s_free_inodes_count = cpu_to_le32(freei); 
  72.   err = percpu_counter_init(&sbi->s_freeinodes_counter, freei, 
  73.        GFP_KERNEL); 
  74.  } 
  75.   err = percpu_counter_init(&sbi->s_dirs_counter, 
  76.        ext4_count_dirs(sb), GFP_KERNEL); 
  77.   err = percpu_counter_init(&sbi->s_dirtyclusters_counter, 0, 
  78.        GFP_KERNEL); 
  79.   err = percpu_init_rwsem(&sbi->s_journal_flag_rwsem); 
  80.  
  81.         return 0; 
  82.  } 

ext4_fill_super主要分六步,均用標號標出。

第1步,讀取ext4_super_block對象,此時并不知道文件系統的block大小,也不知道它起始于第幾個block,只知道它起始于磁盤的第1024字節(前1024字節存放x86啟動信息等)。所以在第1步中先給定一個假設值,一般假設block大小為1024字節,ext4_super_block始于block 1(sb_block)。由sb_min_blocksize計算得到的block大小如果小于1024,就以它作為新的block大小得到block號logical_sb_block和block內的偏移量offset。讀取logical_sb_block的內容,加上計算得到的偏移量,得到的就是ext4_super_block對象(es),但因為block大小可能小于1024,所以有可能讀到的只是ext4_super_block的一部分,所以為了保險起見,接下來只能訪問它的一部分字段,主要是一些簡單的驗證工作。所幸s_log_block_size字段的偏移量0x18并不大,步驟1完成后,可以得到實際的block大小(2^(10+s_log_block_size))。

第2步,block大小最小為1024,最大為65536,我的磁盤中為4096,所以步驟2中會重新計算logical_sb_block和offset分別為0和1024。然后讀取block 0,得到的數據加上1024就是完整的ext4_super_block對象。

第3步,根據得到es為ext4_sb_info字段賦值,代碼段中保留了s_group_desc字段的賦值過程,其余字段省略。

第4步,檢查所有的group descriptors數據的合法性,初始化flex_bg相關的信息。

第5步,調用ext4_iget獲取ext4的root文件,并調用d_make_root創建對應的dentry,為sb->s_root賦值。

第6步,調用ext4_setup_super,將控制權轉移到ext4_setup_super,它將進行幾項最后的檢查并輸出適當的警告信息。最后將超級快的變更內容寫回到磁盤上,更新掛載計數器和上一次掛載的日期。

這樣就將磁盤掛載到linux的VFS文件文件系統中了。其中,file_system_type用于描述具體文件系統的類型,struct vfsmount用于描述一個文件系統的安裝實例。Linux所支持的文件系統,都會有且僅有一個file_system_type結構(比如,Ext2對應ext2_fs_type,Ext3對應ext3_fs_type,Ext4對應ext4_fs_type),而不管它有零個或多個實例被安裝到系統中。每當一個文件系統被安裝時,就會有一個vfsmount結構被創建,它代表了該文件系統的一個安裝實例,也代表了該文件系統的一個安裝點。下圖是超級塊、安裝點和具體的文件系統之間的關系。不同類型的文件系統通過next字段形成一個鏈表,同一種文件系統類型的超級塊通過s_instances字段鏈接在一起,并掛入fs_supers鏈表中。

關于ext4還有很多內容,源碼鏈接:https://elixir.bootlin.com/linux/v4.8/source/fs/ext4/,有興趣的大家可以去看看。

恢復刪除的文件并不神秘

存儲介質上的數據可以分為兩部分:表征文件的數據(可以稱為元數據,metadata)和文件的內容。不僅僅ext4文件系統如此,多數基于磁盤的文件系統都離不開這兩部分。為了恢復刪除的文件,需要先了解刪除的數據屬于哪個類型,多數文件系統刪除的是文件的信息,也就是表示文件和它所屬目錄的關系、文件本身信息的數據,至于文件的內容,一般是不會覆蓋的。這么做最大的優點是效率高,比如我們在ext4文件系統中,刪除一個幾個G字節大小的文件并不會比刪除幾個字節的文件所用的時間長很多。缺點也是明顯的,就是所謂的刪除并沒有對文件的內容造成影響,只要沒有被后續的文件覆蓋,就有被恢復的可能,有安全的風險。

 

責任編輯:姜華 來源: 運維開發故事
相關推薦

2021-06-22 15:16:01

磁盤機械磁盤固態磁盤

2021-06-21 14:52:45

磁盤機械磁盤固態磁盤

2018-01-10 12:42:09

Linux磁盤文件系統

2009-10-12 11:14:51

LinuxLinux磁盤文件系統管理

2021-06-29 07:47:22

文件系統磁盤

2010-03-02 15:09:26

Linux mount

2016-12-27 10:48:59

Linux命令磁盤與文件系統

2010-04-07 18:42:42

Unix命令

2009-10-13 14:31:26

:Linux系統磁盤系統管理

2020-07-22 14:53:06

Linux系統虛擬文件

2017-08-17 10:03:06

磁盤系統實例

2024-03-11 10:30:31

Linux文件系統

2011-01-13 14:10:30

Linux文件系統

2023-09-03 17:09:58

LinuxSAN LUN磁盤

2023-09-05 15:17:48

LinuxLUN磁盤

2020-07-28 08:00:03

存儲數據技術

2018-08-24 10:10:25

Linux文件系統技術

2019-09-20 10:04:45

Linux系統虛擬文件

2021-05-31 07:50:59

Linux文件系統

2013-05-27 14:46:06

文件系統分布式文件系統
點贊
收藏

51CTO技術棧公眾號

91精品国产高清久久久久久91裸体| 亚洲国产精品免费| 99热一区二区三区| 免费看日韩av| 日本女人一区二区三区| 久久精品亚洲一区| 久久精品女同亚洲女同13| 日韩免费小视频| 亚洲女爱视频在线| 快播亚洲色图| 国产精品久久无码一三区| 亚洲激情成人| 久久精品国产精品亚洲| 一区二区不卡免费视频| 国产日韩在线观看视频| 欧美性色视频在线| 国产欧美精品aaaaaa片| a天堂中文在线| fc2成人免费人成在线观看播放| 国产精品扒开腿爽爽爽视频| 日本少妇在线观看| 国产精品久久久久久久久久10秀| 日韩av最新在线观看| 一级片黄色免费| 国产亚洲一区二区手机在线观看| 一区二区三区丝袜| 正在播放一区二区三区| 久草在线网址| 91在线porny国产在线看| 亚洲自拍偷拍视频| 亚洲在线精品视频| 久久亚洲风情| 久久久久五月天| 欧美成人一二三区| 亚洲草久电影| 久久久精品在线| 老司机精品免费视频| 狠狠综合久久av一区二区蜜桃| 精品美女一区二区| 能看毛片的网站| 激情不卡一区二区三区视频在线| 欧美视频一区二区三区在线观看 | 亚洲一区二区伦理| 久久久久久美女| 欧美成人片在线观看| 中文字幕av亚洲精品一部二部| 一级做a爰片久久毛片美女图片| 97超碰在线资源| 日本精品影院| 日韩高清不卡av| 中文字幕在线观看的网站| 成人午夜大片| 亚洲国产精品999| youjizz.com日本| 国产精品高潮呻吟久久久久| 亚洲成人黄色网| 一区二区免费在线观看视频| 国产精品三p一区二区| 亚洲精品在线免费播放| 性欧美18—19sex性高清| 亚洲亚洲一区二区三区| 欧美mv和日韩mv的网站| 色综合久久五月| 在线看成人短视频| 国产亚洲视频在线观看| 亚洲精品一区二区三区在线播放| 欧美成人自拍| 欧美理论片在线观看| 妺妺窝人体色www聚色窝仙踪 | 性色av蜜臀av| kk眼镜猥琐国模调教系列一区二区| 国产精品一级久久久| 少妇性bbb搡bbb爽爽爽欧美| 国产色一区二区| 中文字幕制服丝袜在线| 黄网在线免费看| 天天操天天综合网| 久久九九国产视频| 亚州精品国产| 欧美不卡一区二区三区四区| 一出一进一爽一粗一大视频| 欧洲乱码伦视频免费| 毛片精品免费在线观看| 青青草av在线播放| 免费一区二区视频| 91国产丝袜在线放| 视频一区二区三区在线看免费看| 国产欧美日韩视频在线观看| 91视频成人免费| 成人勉费视频| 欧美一级黄色大片| 中文字幕xxx| 我不卡伦不卡影院| 5278欧美一区二区三区| 中文字幕日日夜夜| 国产成人精品亚洲日本在线桃色| 国产精品视频一区二区三区经| 香蕉人妻av久久久久天天| 国产欧美精品在线观看| 日韩黄色片在线| 亚洲第一会所001| 亚洲成人网久久久| www.涩涩爱| 亚洲欧洲日本mm| 国产又爽又黄的激情精品视频| 天天干天天爱天天操| 国产精品美女久久久久aⅴ国产馆 国产精品美女久久久久av爽李琼 国产精品美女久久久久高潮 | 你懂得影院夜精品a| 7777精品伊人久久久大香线蕉最新版| 中文字幕一区二区三区乱码不卡| 日韩精品午夜| 欧美在线激情视频| 精品人妻无码一区二区| 国产欧美一区二区在线| 人人妻人人添人人爽欧美一区| 96视频在线观看欧美| 国产一区二区三区精品久久久| 久久久久久久久久久网| 极品销魂美女一区二区三区| 日产精品一线二线三线芒果| 国产99在线| 欧美一区永久视频免费观看| 妖精视频在线观看免费| 午夜一区二区三区不卡视频| 99国产在线观看| 黄网站免费在线观看| 91激情五月电影| 三上悠亚影音先锋| 国产欧美激情| 国产一区在线免费| brazzers在线观看| 日韩精品一区二区三区在线| 日韩欧美综合视频| 蜜臀av一区二区在线观看| 欧美日韩综合久久| 亚洲精品成人图区| 亚洲国产三级网| 精品无码人妻一区二区三区| 国产成人av在线影院| 美女黄色片网站| 电影91久久久| 久久综合久久八八| 国产精品玖玖玖| 亚洲天堂成人网| xxx中文字幕| 亚洲字幕久久| 成人免费视频网站| 欧美xxxx免费虐| 亚洲成人久久久久| 日韩xxx高潮hd| 97精品久久久午夜一区二区三区| 国产av麻豆mag剧集| 欧美黑人做爰爽爽爽| 91av视频在线免费观看| 四虎在线视频| 欧美在线观看视频一区二区三区| 免费黄在线观看| 精品一区二区在线看| 免费在线精品视频| 成人动态视频| 日本一区二区在线免费播放| 国产黄色在线| 制服丝袜日韩国产| 激情综合五月网| 97精品国产97久久久久久久久久久久| 无码精品a∨在线观看中文| 日韩最新在线| 国产精品精品久久久| 日本在线免费看| 日韩欧美二区三区| 日本一级淫片色费放| 91视频一区二区| 亚洲欧美日本一区二区三区| 伊人色**天天综合婷婷| 国产综合色一区二区三区| 一级毛片久久久| 北条麻妃一区二区三区中文字幕| a在线观看视频| 精品久久久久久亚洲国产300| av男人的天堂av| 国产精品资源站在线| 777久久久精品一区二区三区| 清纯唯美日韩| 国产精品一区二区不卡视频| 综合在线影院| 欧美疯狂xxxx大交乱88av| 五月婷婷综合久久| 欧美欧美欧美欧美首页| 精品午夜福利在线观看| 久久久久一区二区三区四区| 又色又爽又黄视频| av成人黄色| 自拍亚洲欧美老师丝袜| 免费福利视频一区| 成人做爰www免费看视频网站| 91福利在线尤物| 搡老女人一区二区三区视频tv| 午夜免费福利视频| 欧美撒尿777hd撒尿| 日韩av一二三区| 中文字幕一区不卡| 欧美 日本 国产| 国产一区不卡在线| 青青青在线播放| 黄色亚洲在线| 正在播放一区二区三区| 国产成人三级| 国产精品青青草| 电影一区二区三区久久免费观看| 日韩免费视频在线观看| f2c人成在线观看免费视频| 俺去了亚洲欧美日韩| 国产视频第一区| 亚洲丁香婷深爱综合| 国产人妻精品一区二区三| 色噜噜狠狠一区二区三区果冻| 久久精品国产亚洲AV无码男同| 国产精品区一区二区三区| 美国黄色一级毛片| 成人涩涩免费视频| 人妻少妇偷人精品久久久任期| 美国毛片一区二区| 四虎永久在线精品无码视频| 亚洲高清不卡| 亚洲国产精品无码观看久久| 亚洲成人精品| 在线无限看免费粉色视频| blacked蜜桃精品一区| 免费看污久久久| 亚洲成a人片77777在线播放| 国产伦精品一区二区三区四区免费 | 日本欧美色综合网站免费| 老牛精品亚洲成av人片| 国产99在线免费| 日韩欧美另类中文字幕| 91性高湖久久久久久久久_久久99| 精品三级在线| 国产日韩一区在线| 99久久999| 亚洲一区二区三区sesese| 国产一区二区三区四区五区3d| 国产成人精品999| 亚洲日本网址| 国产精品午夜视频| www一区二区三区| 亚洲一区二区三区视频| 精品国产亚洲一区二区三区在线 | 亚洲你懂的在线视频| 在线看的片片片免费| 亚洲日穴在线视频| 欧美爱爱小视频| 亚洲主播在线播放| 福利一区二区三区四区| 婷婷综合另类小说色区| 黄色在线视频网址| 91久久精品一区二区二区| 波多野结衣日韩| 欧美日韩黄视频| 99久久精品国产一区二区成人| 欧美变态口味重另类| 天天色综合久久| 伊人久久综合97精品| 日本不卡三区| 久久久久久国产| 色资源二区在线视频| 国产精品国产三级国产专播精品人 | 天天亚洲美女在线视频| 国产suv精品一区二区33| 精品视频一区二区不卡| 国内精品国产成人国产三级| 亚洲成人在线视频播放| 久久伊伊香蕉| 日韩在线不卡视频| gogo高清在线播放免费| 国产极品jizzhd欧美| 国产亚洲久久| 九九九九精品| 成人av国产| 成年在线观看视频| 每日更新成人在线视频| 国产精品自拍视频在线| 成人深夜福利app| 日韩精品电影一区二区三区| 亚洲黄色小视频| 三级网站在线播放| 91精品国产综合久久婷婷香蕉| 少妇精品高潮欲妇又嫩中文字幕| 中文综合在线观看| 变态调教一区二区三区| 国产精品免费视频xxxx| 国产一区调教| 在线一区高清| 国产免费成人| 永久免费看片在线观看| 国产午夜亚洲精品不卡| 久久精品无码人妻| 欧美理论片在线| 色猫av在线| 欧美成人小视频| 嫩草伊人久久精品少妇av杨幂| 亚洲一区二区三区久久| 国产亚洲精品美女久久久久久久久久| 中文字幕精品在线播放| 日韩国产精品久久| 欧美一级片黄色| 亚洲精品v日韩精品| 中文天堂在线播放| 亚洲精品之草原avav久久| 在线播放蜜桃麻豆| 日韩免费观看高清| 亚洲欧美日本国产| 亚洲精品无人区| 蜜桃av一区| 日韩av无码一区二区三区不卡 | 99久久国产综合精品麻豆 | 天天综合网天天综合色| 99热这里只有精品3| 综合欧美国产视频二区| 成人av观看| 久久艳妇乳肉豪妇荡乳av| 中文字幕免费一区二区| 天堂一区在线观看| 久久久久久久久岛国免费| 好吊操这里只有精品| 精品国产乱码久久久久久夜甘婷婷| 黄色网址视频在线观看| 国产精品久久久久不卡| 亚洲精品国产动漫| 免费成人午夜视频| 成人av资源在线| 久久中文字幕在线观看| 日韩一区二区不卡| а√天堂8资源在线官网| 国产精品欧美久久久| 精品视频免费| 亚洲五月天综合| 国产日本欧洲亚洲| 国产又粗又猛又黄视频| 国产亚洲精品高潮| 日韩三区免费| 天天久久人人| 麻豆一区二区99久久久久| 久久精品国产亚洲AV成人婷婷| 欧美日韩一区二区三区不卡| www亚洲人| 成人激情视频在线播放| 久久久9色精品国产一区二区三区| 中日韩av在线播放| 成人欧美一区二区三区黑人麻豆| 国产又爽又黄免费软件| 成人97在线观看视频| 日韩精品一区国产| 三上悠亚久久精品| www.欧美.com| 日本视频网站在线观看| 国产午夜一区二区| 欧美xxxx网站| 成人av在线不卡| xf在线a精品一区二区视频网站| 中文字幕黄色片| 自拍视频国产精品| 秋霞一区二区| 精品这里只有精品| 欧美韩国日本不卡| jlzzjlzzjlzz亚洲人| 91极品女神在线| 精品国产aⅴ| 激情图片中文字幕| 亚洲成人精品一区| 你懂的免费在线观看视频网站| 国产精品一区二区三区久久久| 在线中文一区| 天天插天天射天天干| 欧美综合色免费| 在线中文字幕电影| 蜜桃999成人看片在线观看| 蜜臀久久99精品久久久画质超高清 | 黄色大片在线免费观看| 亚洲xxxx3d| 亚洲在线观看| 久久精品一区二区三区四区五区| 精品处破学生在线二十三| 欧美亚洲韩国| www插插插无码免费视频网站| 国产三区在线成人av| 99久久精品免费看国产交换| 性欧美亚洲xxxx乳在线观看| 日韩精品诱惑一区?区三区| 老司机免费视频| 欧美揉bbbbb揉bbbbb| 国产传媒在线观看| 亚洲一区bb| 99久久精品费精品国产一区二区| 97超碰人人草| 欧美一乱一性一交一视频| 久久中文字幕无码| www国产成人| 中文字幕乱码人妻无码久久| 久久久噜噜噜久久中文字免| 日韩电影免费网站|