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

深度剖析 Linux 的 3 種“拷貝”命令

系統(tǒng) Linux
Linux 下有 3 種“拷貝”,分別是 ln,cp,mv,這 3 個命令貌似都能 copy 出一個新的文件出來。

[[403436]]

概述

Linux 下有 3 種“拷貝”,分別是 ln,cp,mv,這 3 個命令貌似都能 copy 出一個新的文件出來。

細(xì)心的小伙伴看到我給 “拷貝” 打上了雙引號?因為 Linux 的這 3 個命令有極大的區(qū)別,雖然用戶看起來是拷貝出了新文件。

你是否曾經(jīng)遇到過以下問題,想通原因了嗎?:

  1.  ln 創(chuàng)建鏈接文件,軟鏈接可以跨文件系統(tǒng),硬鏈接跨文件系統(tǒng)會報錯,為什么?;
  2.  mv 好像有時候快,有時候非常慢,有些時候還會殘留垃圾,為什么?;
  3.  cp 拷貝數(shù)據(jù)有時快,有時候非常慢,源文件和目標(biāo)文件所占物理空間竟然不一致?

本篇文章看完,希望你以上問題不再有疑問,從容使用 ln,mv,cp 命令。

溫馨提示:

以下我們只討論文件的簡單操作,關(guān)于目錄操作或者復(fù)雜參數(shù)的操作不在我們本次主題以內(nèi),我們忽略;

coreutils 庫的代碼版本用的是 8.3;

我們來看下簡單的 3 個命令操作。首先在執(zhí)行以下命令之前,準(zhǔn)備一個不小的 test 的普通文件(比如 1G )。

"拷貝"命令一:ln 

  1. # 創(chuàng)建一個軟鏈接文件  
  2. ln -s ./test ./test_soft_link  
  3. # 創(chuàng)建一個硬連接文件  
  4. ln ./test ./test_hard_link 

你會發(fā)現(xiàn)當(dāng)前目錄出現(xiàn)了兩個新文件 test_soft_link ,test_hard_link 。并且你會發(fā)現(xiàn)拷貝速度好快?為什么呢?

"拷貝"命令二:mv

把 test 文件"拷貝"到 ./backup/ 目錄

  1. mv ./test ./backup/ 

更神奇的是,好像 copy 一個 1 G 的文件,速度也賊快?

“拷貝”命令三:cp

把 test 文件"拷貝"到 ./backup/ 目錄 

  1. cp ./test ./backup/ 

上面我們看到,好像 ln,mv,cp 這 3 個命令都是“拷貝”?好像都進(jìn)行了數(shù)據(jù)復(fù)制出了新的文件?

答案:當(dāng)然不是。這 3 個看起來都是復(fù)制出了新文件,但其實天壤之別。我們一個個來揭秘。

在揭秘這 3 個命令之前,我們必須先復(fù)習(xí)文件的基礎(chǔ)知識點,Linux 的文件和目錄的關(guān)系。

Linux 的文件和目錄

在 深度剖析 Linux cp 的秘密 一文中,我們詳細(xì)剖析了文件系統(tǒng)的形態(tài)。有幾個關(guān)鍵知識點:

  1.  文件系統(tǒng)內(nèi)有 3 個關(guān)鍵區(qū)域:超級塊區(qū)域,inode 區(qū)域,數(shù)據(jù) block 區(qū)域;
  2.  其中一個 inode 和一個文件對應(yīng),包含了文件的元數(shù)據(jù)信息;
  3.  一個 inode 有唯一的編號,可以理解成就是單調(diào)遞增的整數(shù)。比如 1,2,3,4,5,6,,,,;

關(guān)于上面,我們注意到 inode 其實標(biāo)識的是一個平坦的結(jié)構(gòu),inode 索引到數(shù)據(jù) data 區(qū)域,每個 inode 都有唯一編號。

問題來了:Linux 的目錄是一個倒掛的樹形結(jié)構(gòu)呀,為什么上面說 inode 是平坦的結(jié)構(gòu)?如下:

Linux 的文件確實是樹形結(jié)構(gòu),inode 也確實是平坦的結(jié)構(gòu)。你會感覺到因為是因為之前故意忽略了一個幾個東西:目錄文件和 dentry 項。這是兩個非常重要的概念,我們逐個解釋下。

文件系統(tǒng)中其實有兩種文件類型,分為:

  •   普通文件(這里把鏈接文件包含在普通文件以內(nèi))
  •   目錄文件

可以通過 inode->i_mode 字段,使用 S_ISREG,S_ISDIR 這兩個宏來判斷是哪個類型。普通文件很容易理解,就是普通的數(shù)據(jù)文件,inode 里面存儲元數(shù)據(jù),inode 可以索引到 block,block 里面存儲用戶的數(shù)據(jù)。目錄文件 inode 存儲元數(shù)據(jù),block 里面存儲的是目錄條目。目錄條目是什么樣子的東西?

舉個形象的例子:在當(dāng)前 testdir 目錄下,有 dir1,dir2,dir3 這三個文件。假設(shè) dir1 的 inode 編號是 1024,dir2 是 1025,dir3 是 1026。

那么現(xiàn)實是這樣的:

  1.  testdir 這個目錄首先會對應(yīng)有一個 inode,inode->i_mode 的類型是目錄,并且還會有 block 塊,通過 inode->i_blocks 能索引到這些 block;
  2.  block 里面存儲的內(nèi)容很簡單,是一個個目錄條目,內(nèi)核的名字縮寫為 dirent,每一個 dirent 本質(zhì)就是一個 文件名字 到 inode 編號的映射,所以,testdir 這個目錄文件的 block 里存了 3 條記錄 [dir1, 1024],[dir2, 1025],[dir3, 1026];

所以,目錄到底是什么呢?就存儲形態(tài)而已,目錄也是文件,存儲的是 名字 到 inode number 的映射表。dirent 其實就是 directory entry 的縮寫。

好像還沒講到樹形結(jié)構(gòu)?

其實已經(jīng)講了一半了,樹形結(jié)構(gòu)的數(shù)據(jù)結(jié)構(gòu)基礎(chǔ)已經(jīng)有了,就是目錄文件和 dirent 的實現(xiàn)。

假設(shè)葉子結(jié)點的為普通文件

針對開篇的圖,其實磁盤上存儲了 3 個目錄文件

這個時候,讀者朋友你是不是都可以用筆畫出一個樹形結(jié)構(gòu)了,內(nèi)存的樹形結(jié)構(gòu)也是這么來的。通過磁盤的映射數(shù)據(jù)構(gòu)造出來。在內(nèi)存中,這個樹形結(jié)構(gòu)的節(jié)點用 dentry 來表示(通常翻譯成目錄項,但是筆者認(rèn)為這個翻譯很容易讓人誤解)。

以下是筆者從內(nèi)核精簡出來的 dentry 結(jié)構(gòu)體,通過這個總結(jié)到幾個信息:

  1.  dentry 綁定到唯一一個 inode 結(jié)構(gòu)體;
  2.  dentry 有父,子,兄弟的索引路徑,有這個就足夠在內(nèi)存中構(gòu)建一個樹了,并且事實也確實如此; 
  1. struct dentry {  
  2.    // ...  
  3.    struct dentry  *d_parent;   /* 父節(jié)點 */  
  4.    struct qstr    d_name;      // 名字  
  5.    struct inode   *d_inode;    // inode 結(jié)構(gòu)體  
  6.    struct list_head d_child;     /* 兄弟節(jié)點 */  
  7.    struct list_head d_subdirs;   /* 子節(jié)點 */   
  8. }; 

所以,看到現(xiàn)在理解了嗎?父、子 指針,這就是經(jīng)典的樹形結(jié)構(gòu)需要的字段呀。目錄文件類型為樹形結(jié)構(gòu)提供了存儲到磁盤持久化的一種形態(tài),是一種 map 表項的形態(tài),每一個表項我們叫做 dirent 。文件樹的結(jié)構(gòu)在內(nèi)存中以 dentry 結(jié)構(gòu)體體現(xiàn)。

劃重點:仔細(xì)理解下 dirent 和 dentry 的概念和形態(tài),仔細(xì)理解磁盤的數(shù)據(jù)形態(tài)和內(nèi)存的數(shù)據(jù)結(jié)構(gòu)形態(tài),后面要考的。

ln 命令

ln 是 Linux 的基礎(chǔ)命令之一,是 link 的縮寫,顧名思義就是跟鏈接文件相關(guān)的一個命令。一般語法如下:

  1. ln [OPTION]... TARGET LINK_NAME 

ln 可以用來創(chuàng)建一個鏈接文件,有趣的是,鏈接文件有兩個不同的類別:

  •  軟鏈接文件
  •  硬鏈接文件

 1   什么是軟鏈接文件?

無論是軟鏈接還是硬鏈接都是“鏈接”文件,也就是說,通過這個鏈接文件都能找到背后的那個“源文件”。首先說結(jié)論:

  •  軟鏈接文件是一個全新的文件,有獨立的 inode,有自己的 block ,而這個文件類型是“鏈接文件”的類型而已;
  •  這個軟鏈接文件的內(nèi)容是一段 path 路徑,這個路徑直接指向源文件;

所以,你明白了嗎?軟鏈接文件就是一個文件而已,文件里面存儲的是一個路徑字符串。所以軟鏈接文件可以非常靈活,鏈接文件本身和源解耦,只通過一段路徑字符串尋路。

所以,軟鏈接文件是可以跨文件系統(tǒng)創(chuàng)建的。

有興趣的小伙伴可以去看源碼實現(xiàn),在 coreutils 庫里,調(diào)用棧如下: 

  1. main -> do_link -> force_symlinkat -> symlinkat 

也就是說最終調(diào)用的是系統(tǒng)調(diào)用 symlinkat 來完成創(chuàng)建,而這個 symlinkat 系統(tǒng)調(diào)用在內(nèi)核由不同的文件系統(tǒng)實現(xiàn)。舉個例子,如果是 minix 文件系統(tǒng),那么對應(yīng)的函數(shù)就是 minix_symlink。minix_symlink 這個函數(shù)上來就是新建一個 inode ,然后在對應(yīng)的目錄文件中添加一個 dirent 。來來來,我們看一眼 minix_symlink 的主干代碼: 

  1. static int minix_symlink(struct inode * dir, struct dentry *dentry,  
  2.           const char * symname)  
  3.  
  4.  // ...  
  5.  // 新建一個 inode,inode 類型為 S_IFLNK 鏈接類型  
  6.  inode = minix_new_inode(dir, S_IFLNK | 0777, &err);  
  7.  if (!inode)  
  8.    goto out;  
  9.  // 填充鏈接文件內(nèi)容  
  10.  minix_set_inode(inode, 0);  
  11.  err = page_symlink(inode, symname, i);  
  12.  if (err)  
  13.    goto out_fail;  
  14.  // 綁定 dentry 和 inode  
  15.  err = add_nondir(dentry, inode);  
  16.  //...  

劃重點:軟鏈接文件是新建了一個文件,文件類型是鏈接文件,文件內(nèi)容就是一段字符串路徑。分配新的 inode,內(nèi)存對應(yīng)新的 dentry ,當(dāng)然了,也新增了一個 dirent 。軟鏈文件可以跨越不同的文件系統(tǒng)。

 2   什么是硬鏈接文件?

現(xiàn)在我們知道了,軟鏈接文件怎么找到源文件的?通過路徑找到的,路徑就存儲在軟鏈接文件中。硬鏈接文件又怎么辦到的呢?

硬鏈接很神奇,硬鏈接其實是新建了一個 dirent 而已。下面是重點:

  1.  硬鏈接文件其實并沒有新建文件(也就是說,沒有消耗 inode 和 文件所需的 block 塊);
  2.  硬鏈接其實是修改了當(dāng)前目錄所在的目錄文件,加了一個 dirent 而已,這個 dirent 用一個新的 name 名字指向原來的 inode number;

重點來了,由于新舊兩個 dirent 都是指向同一個 inode,那么就導(dǎo)致了一個限制:不能跨文件系統(tǒng)。因為,不同文件系統(tǒng)的 inode 管理都是獨立的。

感興趣的同學(xué)可以試下,跨文件系統(tǒng)創(chuàng)建硬鏈接就會報告如下錯誤:Invalid cross-device link 

  1. sh-4.4# ln /dev/shm/source.txt ./dest.txt  
  2. ln: failed to create hard link './dest.txt' => '/dev/shm/source.txt': Invalid cross-device link 

有興趣的小伙伴可以去看源碼實現(xiàn),在 coreutils 庫里,調(diào)用棧如下: 

  1. main -> do_link -> force_linkat -> linkat 

也就是說最終調(diào)用的是系統(tǒng)調(diào)用 linkat 來完成創(chuàng)建,而這個 linkat 系統(tǒng)調(diào)用在內(nèi)核由不同的文件系統(tǒng)實現(xiàn)。舉個例子,如果是 minix 文件系統(tǒng),那么對應(yīng)的函數(shù)就是 minix_link。這個函數(shù)從內(nèi)存上來講是把一個 dentry 和 inode 關(guān)聯(lián)起來。從磁盤數(shù)據(jù)結(jié)構(gòu)上來講,會在對應(yīng)目錄文件中增加一個 dirent 項。

劃重點:硬鏈接只增加了一個 dirent 項,只修改了目錄文件而已。不涉及到 inode 數(shù)量的變化。新的 name 指向原來的 inode。

mv 命令

mv 是 move 的縮寫,從效果上來看,是把源文件搬移到另一個位置。

你是否思考過 mv 命令內(nèi)部是怎么實現(xiàn)的呢?

是把源文件拷貝到目標(biāo)位置,然后刪除源文件嗎?所以,說 mv 貌似也是“拷貝”?

其實,并不是,準(zhǔn)確的說不完全是。

對于 mv 的討論,要拆分成源和目的文件是否在同一個文件系統(tǒng)。

 1   源 和 目的 在同一個文件系統(tǒng)

mv 命令的核心操作是系統(tǒng)調(diào)用 rename ,rename 從內(nèi)核實現(xiàn)來說只涉及到元數(shù)據(jù)的操作,只涉及到 dirent 的增刪(當(dāng)然不同的文件系統(tǒng)可能略有不同,但是大致如是)。通常操作是刪除源文件所在目錄文件中的 dirent,在目標(biāo)目錄文件中添加一個新的 dirent 項。

劃重點:inode number 不變,inode 不變,不增不減,還是原來的 inode 結(jié)構(gòu)體,所以數(shù)據(jù)完全沒有拷貝。

mv 的調(diào)用棧如下,感興趣的可以自己調(diào)試。 

  1. main -> renameat2  
  2. main -> movefile -> do_move -> copy -> copy_internal -> renameat2 

我們用例子來直觀看下,首先準(zhǔn)備好一個 source.txt 文件,用 stat 命令看下元數(shù)據(jù)信息: 

  1. sh-4.4# stat source.txt  
  2.   File: source.txt  
  3.   Size: 0          Blocks: 0          IO Block: 4096   regular empty file  
  4. Device: 78h/120d Inode: 3156362     Links: 1  
  5. Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root) 

我們看到 inode 編號是:3156362 。然后執(zhí)行 mv 命令:

  1. sh-4.4# mv source.txt dest.txt 

然后 stat 看下 dest.txt 文件的信息: 

  1. sh-4.4# stat dest.txt  
  2.   File: dest.txt  
  3.   Size: 0          Blocks: 0          IO Block: 4096   regular empty file  
  4. Device: 78h/120d Inode: 3156362     Links: 1  
  5. Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root) 

發(fā)現(xiàn)沒?inode 編號還是 3156362 。

 2   源 和 目的 在不同的文件系統(tǒng)

還記得之前我們提過,由于硬鏈接是直接在目錄文件中添加一個 dirent,名字直接指向源文件的 inode ,不同文件系統(tǒng)都是獨立的一套 inode 管理系統(tǒng),所以硬鏈接不能跨文件系統(tǒng)。

那么問題來了,mv 遇到跨文件系統(tǒng)的場景呢,怎么處理?是否還是 rename ?

舉個例子,如下命令,源和目的是不同的文件系統(tǒng)。我虛擬機的掛載點如下: 

  1. sh-4.4# df -h  
  2. Filesystem      Size  Used Avail Use% Mounted on  
  3. overlay          59G  3.5G   52G   7% /  
  4. tmpfs            64M     0   64M   0% /dev  
  5. shm              64M     0   64M   0% /dev/shm 

我故意挑選 /home/qiya/testdir 和 /dev/shm/ ,這兩個目錄分別對應(yīng)了 "/" 和 "/dev/shm/" 的掛載點的文件系統(tǒng),分屬兩個不同的文件系統(tǒng)。我們先提前看下源文件的信息(主要是 inode 信息): 

  1. sh-4.4# stat /dev/shm/source.txt  
  2.   File: /dev/shm/source.txt  
  3.   Size: 0          Blocks: 0          IO Block: 4096   regular empty file  
  4. Device: 7fh/127d Inode: 163990      Links: 1  
  5. Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root) 

我們執(zhí)行以下 mv 命令: 

  1. sh-4.4# mv /dev/shm/source.txt /home/qiya/testdir/dest.txt 

然后看下目的文件信息:

sh-4.4# stat dest.txt 

  1.   File: dest.txt  
  2.   Size: 0          Blocks: 0          IO Block: 4096   regular empty file  
  3. Device: 78h/120d Inode: 3155414     Links: 1  
  4. Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root) 

對比有沒有發(fā)現(xiàn),inode 的信息是不一樣的,inode number 是不一樣的(是不是跟上面同一文件系統(tǒng)下的 mv 現(xiàn)象不一致)什么原因呢?我下面一一道來,從原理出剖析。

當(dāng)系統(tǒng)調(diào)用 rename 的時候,如果源和目的不在同一文件系統(tǒng)時,會報告 EXDEV 的錯誤碼,提示該調(diào)用不能跨文件系統(tǒng)。 

  1. #define EXDEV           18      /* Cross-device link */ 

所以,rename 是不能用于跨文件系統(tǒng)的,這個時候怎么辦?

劃重點:這個時候操作分成兩步走,先 copy ,后 remove 。

   1.  第一步:走不了 rename ,那么就退化成 copy ,也就是真正的拷貝。讀取源文件,寫入目標(biāo)位置,生成一個全新的目標(biāo)文件副本;

  •  這里調(diào)用的 copy_reg 的函數(shù)封裝(要知道這個函數(shù)是 cp 命令的核心函數(shù),在 深度剖析 Linux cp 的秘密 有深入剖析過 );
  •  ln,mv,cp 是在 coreutils 庫里的命令,公用函數(shù)本身就是可以復(fù)用的;

   2. 第二步:刪除源文件,使用 rm 函數(shù)刪除;

思考問題:mv 跨文件系統(tǒng)的時候,如果第一步成功了,第二步失敗了(比如沒有刪除權(quán)限)會怎么樣?

會導(dǎo)致垃圾。也就是說,目標(biāo)處創(chuàng)建了一個新文件,源文件并沒有刪除。這個小實驗有興趣的可以試下。

cp 命令

cp 命令才是真正的數(shù)據(jù)拷貝命令,即拷貝元數(shù)據(jù),也會拷貝數(shù)據(jù)。cp 命令也是我之前花了萬字篇幅分析的命令,詳細(xì)可見:深度剖析 Linux cp 的秘密。這里就不再贅述,下面提煉出關(guān)于拷貝的 3 種模式。

涉及到數(shù)據(jù)拷貝的,關(guān)鍵有個 --sparse 參數(shù),可以控制拷貝數(shù)據(jù)的 IO 次數(shù)。

 1   auto 模式

重點:跳過文件空洞。是 cp 默認(rèn)的模式

  1. cp src.txt dest.txt 

 2   always 模式

重點:跳過文件空洞,還會跳過全 0 數(shù)據(jù),是空間最省的模式。 

  1. cp --sparse=always src.txt dest.txt 

 3   never 模式

重點:無腦拷貝,從頭拷貝到尾,不識別物理空洞和全 0 數(shù)據(jù),是速度最慢的一種模式 

  1. cp --sparse=never src.txt dest.txt 

復(fù)用之前畫的這 3 張圖,很形象的體現(xiàn)了 cp 的行為。

總結(jié)

    1.  目錄文件是一種特殊的文件,可以理解成存儲的是 dirent 列表。dirent 只是名字到 inode 的映射,這個是樹形結(jié)構(gòu)的基礎(chǔ);

    2.  常說目錄樹在內(nèi)存中確實是一個樹的結(jié)構(gòu),每個節(jié)點由 dentry 結(jié)構(gòu)體表示;

    3.  ln -s 創(chuàng)建軟鏈接文件,軟鏈接文件是一個獨立的新文件,有一個新的 inode ,有新的 dentry,文件類型為 link,文件內(nèi)容就是一條指向源的路徑,所以軟鏈的創(chuàng)建可以無視文件系統(tǒng),跨越山河;

    4.  ln 默認(rèn)創(chuàng)建硬連接,硬鏈接文件只在目錄文件里添加了一個新 dirent 項 <新name:原inode>,文件 inode 還是和原文件同一個,所以硬鏈接不能跨文件系統(tǒng)(因為不同的文件系統(tǒng)是獨立的一套 inode 管理方式,不同的文件系統(tǒng)實例對 inode number 的解釋各有不同);

    5.  ln 命令貌似創(chuàng)建出了新文件,但其實不然,ln 只跟元數(shù)據(jù)相關(guān),涉及到 dirent  的變動,不涉及到數(shù)據(jù)的拷貝,起不到數(shù)據(jù)備份的目的;

    6.  mv 其實是調(diào)用 rename 調(diào)用,在同一個文件系統(tǒng)中不涉及到數(shù)據(jù)拷貝,只涉及到元數(shù)據(jù)變更( dirent 的增刪 ),所以速度也很快。但如果 mv 的源和目的在不同的文件系統(tǒng),那么就會退化成真正的 copy ,會涉及到數(shù)據(jù)拷貝,這個時候速度相對慢一些,慢成什么樣子?就跟 cp 命令一樣;

    7.  cp 命令才是真正的數(shù)據(jù)拷貝命令,速度可能相對慢一些,但是 cp 命令有 --spare 可以優(yōu)化拷貝速度,針對空洞和全 0 數(shù)據(jù),可以跳過,從而針對稀疏文件可以節(jié)省大量磁盤 IO; 

 

責(zé)任編輯:龐桂玉 來源: 良許Linux
相關(guān)推薦

2016-11-25 20:52:14

Linux

2010-03-10 15:44:04

2009-12-25 17:27:55

svn命令

2010-03-02 16:13:50

Linux系統(tǒng)啟動過程

2010-03-02 15:45:57

Linux系統(tǒng)啟動過程

2025-04-18 04:05:00

2010-01-20 10:18:13

Linux VI編輯命令

2020-02-18 20:00:31

PostgreSQL數(shù)據(jù)庫

2010-02-07 10:30:01

Android應(yīng)用程序

2009-10-23 14:11:06

linux常用軟件

2023-05-12 08:11:58

JavaScriptJSON克隆

2009-10-19 18:01:35

Linux磁盤分區(qū)

2023-04-11 08:00:56

Redis類型編碼

2025-06-04 08:30:00

seata分布式事務(wù)開發(fā)

2024-02-05 19:06:04

DartVMGC流程

2022-09-27 18:56:28

ArrayList數(shù)組源代碼

2010-01-08 14:06:49

JSON 形式

2012-05-11 10:38:15

Cloud Found

2010-03-01 16:48:02

Python模塊

2015-01-21 10:45:57

災(zāi)難恢復(fù)云應(yīng)用云災(zāi)難恢復(fù)
點贊
收藏

51CTO技術(shù)棧公眾號

国产中文在线视频| 国产免费www| 色老板在线视频一区二区| 欧美日韩国产一区在线| 亚洲精品成人a8198a| av中文字幕免费在线观看| 亚洲久色影视| www国产精品视频| 成人性生活免费看| 欧美97人人模人人爽人人喊视频| 亚洲综合一区在线| 日韩免费av电影| 亚洲精品久久久久久动漫器材一区 | 91亚洲国产成人精品性色| 日产电影一区二区三区| 色777狠狠狠综合伊人| 亚洲精品av在线播放| www.国产视频.com| 竹内纱里奈兽皇系列在线观看| 亚洲视频在线一区| 日韩精品资源| 四季av日韩精品一区| 九一九一国产精品| 日韩免费观看高清| 日本少妇吞精囗交| 91精品国偷自产在线电影| 亚洲美女动态图120秒| 18深夜在线观看免费视频| 欧美日韩五码| 欧美日韩国产精品一区二区不卡中文| 日韩精品福利片午夜免费观看| 国产在线一二三| 久久天堂久久| 秋霞蜜臀av久久电影网免费| 欧美午夜一区二区三区免费大片| 18禁网站免费无遮挡无码中文| 午夜免费福利在线观看| 久久久久久久久蜜桃| 国产乱码精品一区二区三区不卡| 国产精品国产精品国产专区| 免费在线观看一区二区三区| 国产精品成人一区| 亚洲日本韩国在线| 99精品免费网| 国自在线精品视频| 国产精品变态另类虐交| 国一区二区在线观看| 久久成人人人人精品欧| 国产日产精品一区二区三区的介绍| 自拍偷拍一区| 国产亚洲精品久久久| 黄色性生活一级片| 亚洲理论电影| 亚洲色图日韩av| 欧美狂猛xxxxx乱大交3| 九一亚洲精品| 在线看片第一页欧美| 亚洲精品国产精品国自| 国语产色综合| 中文字幕欧美专区| 成年人免费视频播放| 久久国产成人午夜av影院宅| 日韩在线观看免费全集电视剧网站| 黄色片在线观看免费| 菠萝蜜一区二区| 久久精品国产欧美激情| 日本高清不卡免费| 中文字幕乱码亚洲无线精品一区 | 国产精品一区二区三区免费观看| 午夜久久久久久噜噜噜噜| 粉嫩av一区二区三区粉嫩| 国产亚洲精品自在久久| 四虎在线免费观看| 国产亚洲欧洲997久久综合| 亚洲精品欧美精品| 国产激情在线| 午夜影视日本亚洲欧洲精品| 国内自拍在线观看| 日本美女久久| 日韩一级成人av| 7788色淫网站小说| 精品国产不卡| 精品视频9999| 最新中文字幕一区| 理论电影国产精品| 波多野结衣成人在线| 五月天婷婷在线播放| 久久精品欧美日韩| 亚洲小视频在线播放| 51精品在线| 欧美伊人久久久久久久久影院| 天天干天天色天天干| 亚洲国产中文在线二区三区免| 亚洲激情在线观看视频免费| 国产又黄又粗视频| 欧美激情一级片一区二区| 96精品视频在线| 中文字幕乱码人妻无码久久| 国产精品白丝jk黑袜喷水| 国产在线一区二区三区四区| 国产大学生校花援交在线播放| 亚洲另类中文字| 免费在线观看的av网站| 国产日韩欧美中文在线| 日韩精品丝袜在线| 可以免费看av的网址| 午夜久久一区| 国产精品亚洲片夜色在线| 亚洲国产综合一区| 中文字幕第一区二区| 日韩欧美不卡在线| 日韩精品第二页| 亚洲免费中文字幕| 久久免费精彩视频| 美女精品一区二区| 鲁鲁狠狠狠7777一区二区| 99福利在线| 欧美亚洲综合另类| 国产精品嫩草av| 欧美一区91| 国产综合在线观看视频| 久久久久久久久亚洲精品| 一区二区三区在线影院| 色哟哟精品视频| 亚洲a级精品| 欧美情侣性视频| 国产欧美一级片| 国产精品伦理在线| 国产成人av影视| 欧美巨大xxxx| 国精产品一区一区三区有限在线| 国产美女免费看| 国产精品久久一级| 国产九九在线视频| 狠狠色丁香婷婷综合影院| 2019国产精品自在线拍国产不卡| 99在线观看免费| 中文字幕色av一区二区三区| 亚洲综合欧美在线| 国产日产精品一区二区三区四区的观看方式 | 免费麻豆国产一区二区三区四区| 蜜臀av一区二区在线观看| 欧美午夜精品理论片a级大开眼界| brazzers在线观看| 亚洲成年人在线播放| 国产精品成人av久久| 国产成人精品一区二区三区四区| 久久久久久久久久久久久国产| 亚洲在线资源| 久久精品国产亚洲| av一级黄色片| 亚洲最新视频在线观看| 国产成人精品综合久久久久99| 在线中文字幕亚洲| 99久久伊人精品影院| 羞羞的视频在线看| 精品国产凹凸成av人导航| 日韩激情一区二区三区| av中文字幕亚洲| 18禁免费无码无遮挡不卡网站| 亚洲成在人线免费观看| 国产成人精品av在线| 韩国中文字幕2020精品| 欧美日韩中文字幕一区| 美女三级黄色片| 国产成人免费视频精品含羞草妖精| 日韩成人手机在线| 老牛精品亚洲成av人片| 日本老师69xxx| 在线观看二区| 日韩欧美激情在线| 日本免费观看视| 国产网站一区二区三区| 97人人爽人人| 欧美激情1区2区3区| 国产在线观看一区| 午夜av成人| 色综合天天综合网国产成人网 | 久久艹国产精品| 日韩影视高清在线观看| 国产精品久久久久久久久免费 | 亚洲欧洲精品一区二区三区不卡| 中文字幕第10页| 在线精品一区| 五月天丁香综合久久国产 | 3344国产永久在线观看视频| 亚洲日本中文字幕| 国产农村妇女毛片精品久久| 午夜精品福利视频网站| 男人的天堂官网 | 91pron在线| 在线看片福利| 久久精品国产清自在天天线| 亚州视频一区二区三区| 欧美日韩国产综合视频在线观看| 国产 日韩 欧美 成人| 中文字幕欧美日韩一区| 国内精品免费视频| 日本系列欧美系列| 久久久久久免费看| 第一sis亚洲原创| 国产精品久久亚洲| 亚洲精品无播放器在线播放| 91成人福利在线| av网站导航在线观看免费| 亚洲精品午夜精品| 精品国产无码AV| 欧美在线你懂得| 国产精品100| 亚洲一区二区三区国产| 欧美成人久久久免费播放| 99精品一区二区| 国产大片一区二区三区| 日韩1区2区日韩1区2区| xxxx18hd亚洲hd捆绑| 亚洲精品成人影院| 午夜精品短视频| 午夜精品福利影院| 动漫美女被爆操久久久| 高清国产一区二区三区四区五区| 情事1991在线| 老色鬼在线视频| 欧美激情视频一区二区三区不卡| 欧美日韩视频在线播放| 亚洲天堂男人天堂女人天堂| 亚州视频一区二区三区| 亚洲精品一线二线三线| 国产99久一区二区三区a片 | 亚洲精品综合在线| 蜜桃av免费观看| 国产婷婷一区二区| 国产全是老熟女太爽了| 久久久噜噜噜久久中文字幕色伊伊| 国产高潮失禁喷水爽到抽搐 | 呦呦在线视频| 久久亚洲精品中文字幕冲田杏梨 | 综合久久综合久久| 精品熟妇无码av免费久久| 久久亚洲精华国产精华液| 国产一卡二卡三卡四卡| 懂色av一区二区三区蜜臀| 麻豆精品国产传媒| 国产一区二区三区美女| 天天综合天天添夜夜添狠狠添| 免费观看一级特黄欧美大片| 538任你躁在线精品免费| 轻轻草成人在线| 亚洲精品久久久中文字幕| 久久成人免费电影| 在线播放免费视频| 国产二区国产一区在线观看| 国产乱国产乱老熟300部视频| 丰满岳乱妇一区二区三区| 亚洲欧美日韩色| 91色婷婷久久久久合中文| 国产精品夜夜夜一区二区三区尤| 四虎精品成人影院观看地址| 精品网站999www| 久久久久久久久亚洲精品| 国产亚洲精品高潮| 日本欧美在线视频免费观看| 久久精品成人一区二区三区 | 三级精品视频| 欧美h视频在线| 欧美超碰在线| 欧美国产视频一区| 国产精品一国产精品k频道56| 国产免费成人在线| 秋霞影院一区二区| 日韩av加勒比| 99re热这里只有精品免费视频| 亚洲AV无码国产成人久久| 国产精品毛片无遮挡高清| 久久97人妻无码一区二区三区| 激情亚洲一区二区三区四区 | 欧美第一页在线观看| 亚洲一区二区视频在线观看| 亚洲伊人成人网| 欧美日韩aaaaaa| 丰满人妻一区二区三区无码av| 日韩av综合中文字幕| jizz在线观看中文| 欧美另类交人妖| 日本韩国欧美| 97超碰资源| 激情五月综合| 人人妻人人澡人人爽欧美一区双| 免费在线日韩av| 久久艹这里只有精品| 26uuu亚洲| 免费在线黄色网| 日韩欧美亚洲综合| 99草在线视频| 亚洲三级av在线| 国产第一页在线| 国产美女精品视频| 日韩极品在线| 欧洲美女和动交zoz0z| 另类亚洲自拍| 国产xxx在线观看 | 日韩在线导航| 亚洲国产一区二区三区a毛片| 中文字幕在线综合| 91毛片在线观看| 免费一级黄色大片| 欧美日韩日日摸| 国内在线免费高清视频| 久久久久久国产免费| 免费一区二区三区四区| 精品网站在线看| 午夜天堂精品久久久久| 男人添女人下面免费视频| 99精品黄色片免费大全| 精品欧美一区二区久久久久| 欧美日韩一区在线| 国产一区二区三区福利| 午夜精品99久久免费| 免费看一区二区三区| 综合操久久久| 日韩av在线播放中文字幕| 国产精品无码永久免费不卡| 亚洲综合色婷婷| 国产chinasex对白videos麻豆| 色偷偷888欧美精品久久久 | 91麻豆蜜桃| 我不卡伦不卡影院| 97超碰人人爽| 欧美激情一区二区| 不卡av电影在线| 亚洲开心激情网| 色偷偷偷在线视频播放 | 国产99久久| 欧美日韩激情视频在线观看 | 污污视频网站在线免费观看| 在线日韩一区二区| 久久视频www| 国产精品久久久久久久7电影| 一区二区导航| 国产一区视频免费观看| 久久蜜臀中文字幕| 午夜精品一区二| 国产一区二区三区三区在线观看| 日韩影片中文字幕| 日韩尤物视频| 捆绑紧缚一区二区三区视频 | 亚洲第一综合色| 成人爽a毛片一区二区| 欧美激情欧美狂野欧美精品| 成人香蕉社区| 少妇高潮喷水在线观看| 99精品桃花视频在线观看| 国产情侣自拍av| 亚洲天堂精品在线| 岛国一区二区| 三级在线免费观看| 成人性生交大合| 国产成人精品网| 中文在线不卡视频| 经典三级久久| 国产精品国产三级国产专区51| eeuss鲁片一区二区三区在线观看| 国产成人一区二区三区影院在线| 日韩黄在线观看| 成人黄色在线| 青青视频免费在线| 波多野结衣精品在线| 国产又大又粗又爽| 色伦专区97中文字幕| 日本一区二区三区电影免费观看| 国产午夜精品视频一区二区三区| 成人小视频免费在线观看| 亚洲欧美精品一区二区三区| 色综合伊人色综合网站| 精品国产亚洲一区二区三区大结局| 国产天堂视频在线观看| 久久免费国产精品 | 欧美v国产在线一区二区三区| 小早川怜子影音先锋在线观看| 日韩av电影免费播放| 国产乱码字幕精品高清av| 日韩少妇裸体做爰视频| 在线观看亚洲区| 国产成人精品亚洲线观看| 欧美视频免费播放| 亚洲视频每日更新| 五十路在线视频| 91九色在线视频| 久久国产66| 欧美成人免费看| 亚洲视频在线观看免费| 国产午夜久久av| www日韩视频| 亚洲综合一区二区三区| av电影在线观看网址| 国产成人精品免费视频大全最热| 免费一级片91| 日本一级一片免费视频| 日韩视频一区在线| 国产成人精品999在线观看| 岛国av免费观看|