磁盤、文件系統管理

linux磁盤、文件系統管理

硬盤:機械硬盤、固態硬盤

    計算硬盤速度:IoPs:(Io  per  second ) 每秒20次

機械硬盤:

    track:磁道

    平均尋道時間

        5400rpm    每分鐘5400轉,(一般筆記本)

        10000/15000   臺式電腦

    sector:扇區(一個扇區512byte,)

    cylinder:柱面(一塊彈片上的上下兩面的同一個磁道)

不同彈面上的同一個編號的叫柱面,分區劃分是給予柱面的

1.為什么要分區?

        因為硬盤很大,為了使得一個硬盤中可以組織為多個可獨立管理的文件系統,所以要分區,每一個被劃分出來的分區是獨立的塊設備。

設備分兩類:

隨機訪問設備:

塊設備:Block,存取單位是“塊”,如硬盤 

線性訪問設備:

字符設備:“char”,存取單位是“字符”,如鍵盤

        每一個設備都有一個文件作為它的訪問入口,此文件我們稱之為設備文件,該文件關聯至一個設備驅動程序,進而能夠與之對應的硬件設備通信

    每一個硬件設備在內核集中都是靠一個設備號來進行標識的

    設備號:用來標識設備,不同類別的設備各有不同的設備號,同一類別的設備有不同設備或多個設備,因此就有主設備號和次設備號

    主設備號:major:用來識別設備類型

    次設備號:minor:用來識別同一類型下的不同設備

MBR(Master   Boot  Record):主引導記錄

        在硬盤上有一個0磁道0扇區是被預留出來的,他不屬于任何分區,這個扇區稱之為MBR,嚴格意義上講應該叫做用來存儲MBR的一段空間,

0磁道0扇區:

        該扇區的大小為512bytes,專門用來存儲MBR(Master Boot  Record)主引導記錄,MBR又分為三部分

    第一部分:446個字節:存儲boot loader,引導加載器

    第二部分:64bytes:存儲分區表:有多少多少個分區,每個分區從哪里開始到哪里結束;其中每16個字節表示一個分區,因此64除16等于4,so,一塊設備最多只能有4個主分區;

    第三部分:2bytes:前面信息的有效性標識(結束標志),用4個16進制數來表示55AA,表示前面510bytes是有效的。

    如果一塊硬盤需要劃分超過4個分區,則需要其中16個字節的主分區劃分為擴展分區,擴展分區中可以劃分無數個邏輯分區(當然也得硬盤大小決定)

注意:當磁盤容量超過2T的時候,MBR機制不能識別到2T以上的磁盤空間,此時需要用到GPT機制來進行分區

文件系統管理

重新創建文件系統會損壞原有文件

分區管理

fisk命令:管理MBR(Master  Boot   Record)磁盤分區表

        fdisk提供了一個交互式接口來管理分區,他有許多子命令,分別用于不同的管理功能,所有操作都是在內存中完成,沒有直接同步到磁盤,如果分區完成,輸出w命令保存退出后才寫到磁盤并生效。

類型:分區所在場景類型(使用·fdisk  /dev/磁盤· 使用l命令即可查看所有id對應分區類型)

正常分區:83

擴展分區:5

交換分區:82

 Device    Boot      Start         End       Blocks    Id  System
/dev/sdb1   *         1            26        204800    83  Linux
/dev/sdb2             26           7859     62914560   8e  Linux LVM

注:centos6上“start”字段和“End”字段表示的是此分區的大小是按照柱面的單位劃分大小(表示開始柱面和結束柱面)

      centos7上“start”字段和“End”字段表示的是此分區的大小是按照扇區的單位劃分大小(表示開始扇區和結束扇區)

1.查看分區情況:

fdisk   -l[u]   [device]

列出指定磁盤設備的分區情況

(1)#fdisk -l      列出所有分區設備

(2)#fdisk  -l  /dev/sda    列出sda磁盤的分區情況

root@localhost mntsdb]# fdisk -l /dev/sda
Disk /dev/sdb: 21.5 GB, 21474836480 bytes
255 heads, 63 sectors/track, 2610 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x000682bf
   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1   *           1          26      204800   83  Linux
Partition 1 does not end on cylinder boundary.
/dev/sdb2              26        7859    62914560   8e  Linux LVM

2.管理分區

fdisk  [u]    [device]

#fdisk  -u  /dev/sda  //進入fdisk配置分區界面,選項”u“可不用寫。

 

[root@localhost mntsdb]# fdisk -u /dev/sdb
WARNING: DOS-compatible mode is deprecated. It's strongly recommended to
         switch off the mode (command 'c').
Command (m for help): 在此鍵入命令,可用m查看命令

進入配置交互式界面常用命令:

     n:創建新分區

     d:刪除指定已有的分區

     t:修改分區類型

     l:查看所有id對應分區類型,

     p:列出已有分區

     w:保存退出

     q:不保存退出  

     m:幫助  (列出所有交互命令)

    

n:創建新分區

Command (m for help): n   //新建分區,n命令
Command action      //列出當前可創建的分區
   e   extended    //擴展分區
   p   primary partition (1-4 )  //主分區
p       //輸入p命令,創建主分區
Partition number (1-4): 1    //主分區號1
First cylinder (1-2610, default 1):     //分區開始柱面(centos6是以柱面為單位劃分分區大小)
Using default value 1     //直接回車從第一個開始
Last cylinder, +cylinders or +size{K,M,G} (1-2610, default 2610): +1G  
     //大小為1G,指定分區大小有三種方法(1、輸出最后柱面,表示從開始柱面到結束柱面大小2、+柱面,表示從開始柱面到指定的柱面,如+100,表示在第一個柱面的基礎上增加100個柱面,3、直接輸出分區大小,單位K/M/G )

Command (m for help): p    //查看當前分區信息
一下為當前磁盤的描述信息,總大小為21.5GB,255個磁頭,63個扇區為一個磁道,2610個柱面等等
#####################################
#Disk /dev/sdc: 21.5 GB, 21474836480 bytes                     
#255 heads, 63 sectors/track, 2610 cylinders                        
#Units = cylinders of 16065 * 512 = 8225280 bytes             
#Sector size (logical/physical): 512 bytes / 512 bytes         
#I/O size (minimum/optimal): 512 bytes / 512 bytes          
#Disk identifier: 0x4d566b71                              
#####################################
   Device Boot      Start         End      Blocks   Id  System
/dev/sdc1               1         132     1060258+  83  Linux

d:刪除指定已有的分區

Command (m for help): p
  Device Boot      Start         End      Blocks   Id  System
/dev/sdc1               1         132     1060258+  83  Linux
/dev/sdc2             133         264     1060290   83  Linux
/dev/sdc3             265         396     1060290   83  Linux
Command (m for help): d
Partition number (1-4): 1
Command (m for help): p
   Device Boot      Start         End      Blocks   Id  System
/dev/sdc2             133         264     1060290   83  Linux
/dev/sdc3             265         396     1060290   83  Linux

t:修改分區類型

  Device Boot      Start         End      Blocks   Id  System
/dev/sdc1               1         132     1060258+  83  Linux
/dev/sdc2             133         264     1060290   83  Linux
/dev/sdc3             265         396     1060290   83  Linux
Command (m for help): t
Partition number (1-4): 2
 Hex code (type L to list codes): 82    //可使用大寫L查看分區id號對應的分區類型
Changed system type of partition 2 to 82 (Linux swap / Solaris)

l:查看所有id對應分區類型,

Command (m for help): l
 0  Empty           24  NEC DOS         81  Minix / old Lin bf  Solaris        
 1  FAT12           39  Plan 9          82  Linux swap / So c1  DRDOS/sec (FAT-
 2  XENIX root      3c  PartitionMagic  83  Linux           c4  DRDOS/sec (FAT-
...........................

p:列出已有分區

Command (m for help): p
..........
   Device Boot      Start         End      Blocks   Id  System
/dev/sdc1               1         132     1060258+  83  Linux
/dev/sdc2             133         264     1060290   82  Linux swap / Solaris
/dev/sdc3             265         396     1060290   83  Linux

w:保存退出

Command (m for help): w

q:不保存退出  

Command (m for help): q


m:幫助  (列出所有交互命令)

Command (m for help): m
Command action
   a   toggle a bootable flag
   b   edit bsd disklabel
   c   toggle the dos compatibility flag
   d   delete a partition
   l   list known partition types
   m   print this menu
   n   add a new partition
   o   create a new empty DOS partition table
   p   print the partition table
   q   quit without saving changes
   s   create a new empty Sun disklabel
   t   change a partition's system id
   u   change display/entry units
   v   verify the partition table
   w   write table to disk and exit
   x   extra functionality (experts only)

注:在已有分區并且已經掛載中的分區所在的磁盤上創建的新分區,內核可能在創建完成后無法直接識別

查看磁盤生效的所有分區三種方法:

1、cat  /proc/partitions

2、lsblk     

  //不加參數列出所有分區信息,后面可跟參數(如:lsblk   /dev/sda  ,只列出sda磁盤的分區信息)

3、ls   /dev/sd*       //因為現在的操作系統所有磁盤都是以sd開頭命令

通知內核強制重讀磁盤分區表:

centos6/7:partx  -a   [device]     同步指定的磁盤指定分區信息

-d:同步刪除的分區信息,強讀磁盤的分區信息

–nr: 同步磁盤的指定范圍的分區信息,一般組合d使用

      kpartx  -af  [device]     同步指定的磁盤所有分區信息

[root@localhost mntsdb]# partx -a /dev/sdc
BLKPG: Device or resource busy
error adding partition 1
BLKPG: Device or resource busy
error adding partition 2
BLKPG: Device or resource busy
error adding partition 3
[root@localhost mntsdb]# kpartx -af /dev/sdc

注:parted 默認創建的是GPT類型的分區,fdisk創建的是MBR類型的分區

創建文件系統:

格式化分為兩類:

     低級格式化:(分區之前進行,劃分磁道)

     高級格式化:(分區之后進行,創建文件系統)

創建文件系統是劃分分區的元數據區和數據區

    元數據區:

        文件的元數據(inode)

            大小、權限、屬組、屬主、時間戳、數據塊指針

VFS:virtual  file  system 虛擬文件系統

linux的文件系統:ext2/ext3/ext4/xfs/vfat/reiserfs/btrfs
光盤的文件系統:iso9660
網絡文件系統:gfs2、ocfs2
交換文件系統:swap
偽文件系統:proc、sysfs、tmpfs
unix文件系統:ufs、ffs、jfs(有日志)

注:linux的文件系統又以有無日志功能分類:其中:有日志的文件系統(ext3、ext4、xfs)無日志的文件系統(ext2、vfat)

文件系統管理工具分類:

1、創建文件系統的工具
    mkfs、mke2fs(ext系列文件系統管理工具)
2、檢測及修復文件系統的工具
    fsck
3、查看文件系統屬性的工具
    dumpe2fs、tune2fs
4、調整文件系統特性的工具
    tune2fs

1、創建文件系統:mkfs

mkfs -t ext2   /dev/sda1   //創建文件系統
mkfs -t ext2 = mkfs.ext2

2、專門管理ext系列文件:mke2fs

mke2fs  [option]  device
-t :指明要創建的文件系統
-j: 創建ext3類型文件系統
-b BLOCK_SIZE: 指定塊大小,默認為4096;可用取值為1024、2048或4096;
-L LABEL:指定分區卷標;
-m #: 指定預留給超級用戶的塊數百分比
-i #: 用于指定為多少字節的空間創建一個inode,默認為8192;這里給出的數值應該為塊大小的2^n倍;
-N #: 為數據空間創建多少個inode個數;

-t :指明要創建的文件系統

[root@localhost mntsdb]# mke2fs -t etx4 /dev/sdb2
[root@localhost mntsdb]# blkid  /dev/sdb2
/dev/sdb2: UUID="c4359ac0-e295-48a8-bc78-916bfc644fbb" TYPE="ext2" 
注:mke2fs -t etx4 /dev/sdb2  ==  mkfs.ext4  /dev/sdb2    ==  mkfs -t ext4  /dev/sdb2

-j: 創建ext3類型文件系統

[root@localhost ~]# mke2fs -j /dev/sdc1
.......
[root@localhost ~]# blkid /dev/sdc1
/dev/sdc1: UUID="03cb5410-c543-4d37-8857-3fa531c23718" SEC_TYPE="ext2" TYPE="ext3"

-b BLOCK_SIZE: 指定塊大小,默認為4096;可用取值為1024、2048或4096;(只能用這是三個值)

[root@localhost ~]# mke2fs -b 2048 /dev/sdc2
..........
[root@localhost ~]# tune2fs -l /dev/sdc2
tune2fs 1.41.12 (17-May-2010)
.......
First block:              0
Block size:               2048    //tune2fs 
......
注:塊大小決定文件的尋址范圍
塊大小   直接尋址    間接尋址    二次間接尋址    三次間接尋址
1024     12KB        268KB        64.26MB        16.06GB
2048     24KB        1.02MB       513.02MB        265.5GB
4096     48KB        4.04MB        4GB~             4TB

-L LABEL:指定分區卷標;

[root@localhost ~]# mke2fs -L "hello sdc3" /dev/sdc3
mke2fs 1.41.12 (17-May-2010)
Filesystem label=hello sdc3
.......
[root@localhost ~]# blkid /dev/sdc3
/dev/sdc3: LABEL="hello sdc3" UUID="624cbf32-9331-4703-b787-65f1d1a471c4" TYPE="ext2"

 

-m #: 指定預留給超級用戶的塊數百分比

        為超級用戶保留的塊的比例。為了防止所有的塊都被用光,某些情況下啟動不起來,必須要為超級用戶保留一定比例的塊,這個值默認是5%

[root@localhost ~]# mke2fs -m 10 /dev/sdc4
mke2fs 1.41.12 (17-May-2010)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
850304 inodes, 3397747 blocks
339774 blocks (10.00%) reserved for the super user 
   //安裝過程中提示出來的信息,預留10%給超級用戶
 
[root@localhost ~]# tune2fs -l /dev/sdc4     //使用查看ext系列文件系統信息
.......  
Reserved block count:     339774   //此為預留的超級塊信息
.........


-i #: 用于指定為多少字節的空間創建一個inode,默認為8192;這里給出的數值應該為塊大小的2^n倍

    這個參數的含義是多少個字節分配一個inode。這個參數反映的是,我們對儲存在我們文件系統上的每個文件大小的期許。換句話說,我們期待,每個文件都是4096個字節左右,每個文件需要一個inode。所以我們一共需要500M/4096=12800個inode。

    舉例說明,如果我打算在我這個ext2存儲的文件都很小,比如說大多數文件都小于1K。那么如果這個-i的值為8192的話,就會出現下面的情況:總共有512000個塊卻只有64008個inode。 如果你還沒體會到我的意思,那么看Group 0 ,1000個左右的free inode,但是有近8000個free block 。根據我的設定,我的文件大多數比較小,那么,當我的文件個數達到1000個時 free inode先用完了,Group 0 還有近7000個塊空閑。 也就是說選錯了 -i參數使我的inode先用完了。那么就算有大把的free block,你也無法創建文件了。

    這個參數的取值范圍是 1024~65536 

設定原則為:考慮下你的大多數文件有多大,就設為多大。不設成1024的整數倍也是可以的。

[root@localhost ~]# mke2fs -j -i 2048 /dev/sdc4
mke2fs 1.41.12 (17-May-2010)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
6795776 inodes, 3397747 blocks

-N #: 指定inode個數;

[root@localhost ~]# mke2fs -N 1000 /dev/sdc4

小例題:在對分區進行創建文件系統時出現提示在運行時,如下類問題時:解決辦法為(先運行:dmsetupstatus,觀看提示結果,再運行 dmsetup remove_all,再次運行:dmsetup status 查看結果與之前有什么不同,此時再創建文件系統就沒問題了

[root@localhost ~]# mkfs.ext4 /dev/sdc1
mke2fs 1.41.12 (17-May-2010)
/dev/sdc1 is apparently in use by the system; will not make a filesystem here
[root@localhost ~]#dmsetup status
[root@localhost ~]#dmsetup remove_all
[root@localhost ~]#dmsetup status

tune2fs: 查看或修改ext系列的文件系統的相關屬性

注意:塊大小創建后不能修改

-j: 不損害原有數據,將ext2升級為ext3;

[root@localhost ~]# blkid
/dev/sdc4: UUID="ae221423-d29a-4d23-918c-6c2e22e969d3" TYPE="ext2" 
[root@localhost ~]# tune2fs -j /dev/sdc4
/dev/sdc4: UUID="ae221423-d29a-4d23-918c-6c2e22e969d3" SEC_TYPE="ext2" TYPE="ext3"

-L LABEL: 設定或修改卷標; 

[root@localhost ~]# blkid
/dev/sdc3: LABEL="hello sdc3" UUID="624cbf32-9331-4703-b787-65f1d1a471c4" TYPE="ext2" 
[root@localhost ~]# tune2fs -L "This is LABEL" /dev/sdc3
[root@localhost ~]# blkid
/dev/sdc3: LABEL="This is LABEL" UUID="624cbf32-9331-4703-b787-65f1d1a471c4" TYPE="ext2"

-m #: 調整預留百分比;

#tune2fs -m  10 /dev/sdc4 

-r #: 指定預留塊數;

#tune2fs  -r  4096  /dev/sda1

-o: 設定默認掛載選項;(對指定的分區設定掛載選項后,掛載此分區的目錄將繼承此功能)

#tune2fs  -o   acl  /dev/sdc1    //設定acl控制。
#tune2fs  -o  ^acl  /dev/sdc2    //關閉acl控制

-c #:指定掛載次數達到#次之后進行自檢,0或-1表關閉此功能;

#tune2fs -c  


-i #: 每掛載使用多少天后進行自檢;0或-1表示關閉此功能;

[root@localhost ~]# tune2fs -l  /dev/sdc1
.......
Mount count:              0
Maximum mount count:      35         //此分區超過掛載35次就檢查文件系統
Last checked:             Mon Jul 25 20:48:14 2016
Check interval:           15552000 (6 months)  
 //此分區超過6個月就檢查文件系統   這兩個條件滿足其中一個就觸發檢查
.......

-l: 顯示超級塊中的信息;

#tune2fs -l /dev/sdc1

blkid: 查詢或查看磁盤設備的相關屬性

blkid  device      

[root@localhost ~]# blkid /dev/sdc2
/dev/sdc2: UUID="82f6661f-9edc-4a2d-80a2-34e2e701f722" TYPE="ext2"

blkid  -U   UUID    

[root@localhost ~]# blkid -U 82f6661f-9edc-4a2d-80a2-34e2e701f722
/dev/sdc2

blkid    -L     LABEL

[root@localhost ~]# blkid /dev/sdc3
/dev/sdc3: LABEL="hello world" UUID="624cbf32-9331-4703-b787-65f1d1a471c4" TYPE="ext2" 
[root@localhost ~]# blkid -L "hello world"
/dev/sdc3

e2label: 用于查看或定義卷標

格式:e2label  設備文件 設定卷標

e2label device //查看分區卷標

[root@localhost ~]# e2label /dev/sdc3
hello world

e2label  device   LABEL   修改指定的分區的卷標,如果原本有則替換

 [root@localhost ~]# e2label /dev/sdc4 hello
[root@localhost ~]# e2label /dev/sdc4
hello

dumpe2fs: 顯示ext系列文件系統屬性信息

[root@localhost ~]# dumpe2fs  /dev/sdc2   //顯示系統屬性信息

-h: 只顯示超級塊中的信息 
[root@localhost ~]# dumpe2fs -h /dev/sdc2
dumpe2fs 1.41.12 (17-May-2010)
Filesystem volume name:   <none>
Last mounted on:          <not available>
Filesystem UUID:          82f6661f-9edc-4a2d-80a2-34e2e701f722
Filesystem magic number:  0xEF53
Filesystem revision #:    1 (dynamic)
Filesystem features:      ext_attr resize_inode dir_index filetype sparse_super
Filesystem flags:         signed_directory_hash 
Default mount options:    (none)
Filesystem state:         clean
Errors behavior:          Continue
Filesystem OS type:       Linux
Inode count:              983040
Block count:              7855784
Reserved block count:     392789
Free blocks:              7725161
Free inodes:              983029
First block:              0
Block size:               2048
Fragment size:            2048
Reserved GDT blocks:      512
Blocks per group:         16384
Fragments per group:      16384
Inodes per group:         2048
Inode blocks per group:   256
Filesystem created:       Mon Jul 25 20:57:37 2016
Last mount time:          n/a
Last write time:          Mon Jul 25 20:57:38 2016
Mount count:              0
Maximum mount count:      27
Last checked:             Mon Jul 25 20:57:37 2016
Check interval:           15552000 (6 months)
Next check after:         Sat Jan 21 20:57:37 2017
Reserved blocks uid:      0 (user root)
Reserved blocks gid:      0 (group root)
First inode:              11
Inode size:          256
Required extra isize:     28
Desired extra isize:      28
Default directory hash:   half_md4
Directory Hash Seed:      083188b6-9e4c-433f-99dd-abe5be0b2b99

fsck: 檢查并修復Linux文件系統(通用所有文件系統)

因進程意外終止或系統崩潰的原因導致寫入操作時非正常終止時,可能會造成文件損壞,此時應該檢測并修復文件西戎,建議離線進行

-t FSTYPE: 指定文件系統類型

-a: 自動修復

-r:交互式修復

e2fsck: 專用于修復ext2/ext3文件系統

e2fsck  [options]  device

-f: 強制檢查;

[root@localhost ~]# e2fsck -f  /dev/sda1

-y:對所有問題自動回答為yes

[root@localhost ~]# e2fsck -y /dev/sdc2
e2fsck 1.41.12 (17-May-2010)
The filesystem size (according to the superblock) is 7855784 blocks
The physical size of the device is 530145 blocks
Either the superblock or the partition table is likely to be corrupt!
Abort? ye

原創文章,作者:Lii,如若轉載,請注明出處:http://www.www58058.com/40024

(0)
LiiLii
上一篇 2016-08-25
下一篇 2016-08-25

相關推薦

  • RAID特性和常見級別

    簡介:    RAID全稱為獨立磁盤冗余陣列(Redundant Array of Independent Disks),基本思想就是把多個相對便宜的硬盤組合起來,成為一個硬盤陣列組,使性能達到甚至超過一個價格昂貴、 容量巨大的硬盤。RAID通常被用在服務器電腦上,使用完全相同的硬盤組成一個邏輯扇區,因此操作系統只會把它當做一個硬盤。 R…

    Linux干貨 2016-02-14
  • Shell腳本編程入門

    什么是Shell      操作系統最外層的程序,shell通過提示符讓用戶輸入,向操作系統解釋該輸入,然后處理來自操作系統的任何結果輸出來,管理用戶與操作系統之間的交互。      Shell是一個用戶跟操作系統之間的一個命令解釋器。Shell是用戶與Linux操作系統之間溝通…

    Linux干貨 2016-08-15
  • bash腳本編程class2

    bash腳本class2—循環語句的使用      一.三種循環語句以及其具體使用方法   我們知道,在shell腳本編程過程中,為了實現邏輯關系的運算,有三種執行命令的順序:順序執行,選擇執行,循環執行。通過if,case這類語句可以實現條件篩選后執行命令,這次課程中所學的主要知識點為循環語句的三種使用方式:for,…

    Linux干貨 2016-08-19
  • 第1周-1:計算機的組成及其功能以及部分常見Linux發行版簡介

    一、計算機的組成及其功能: 計算機主要由硬件部分和軟件部分組成。 1、硬件部分 (1)中央處理器 由控制器和運算器兩大部分組成,是計算機的大腦,硬件部分里最關鍵的部分。決定著整個計算機系統的性能。 控制器負責協調計算機硬件的其他部分同步工作,對其他的硬件進行發號施令。是計算機系統的司令??刂破鲝拇鎯ζ髦凶x取指令,分析指令的含義,要完成什么操作,需要什么數據,…

    Linux干貨 2016-11-01
  • shell腳本基礎

    shell腳本基礎 變量 bash的變量:  環境變量  本地變量  位置變量  特殊變量 本地變量:bash:作用域為整個bash進程 局部變量:作用域為當前代碼段 local VARNAME=VALUE 引用變量:${VARNAME} 環境變量:作用域為當前的shell進程及其子進程 export VARNAME=…

    Linux干貨 2017-04-16
  • 用戶管理

    http://www.jianshu.com/p/a07ae29ca345

    Linux干貨 2017-07-23
欧美性久久久久