码迷,mamicode.com
首页 > 其他好文 > 详细

1-13 RHEL7-硬盘介绍和磁盘管理

时间:2016-08-16 14:42:00      阅读:122      评论:0      收藏:0      [点我收藏+]

标签:

 

熟悉Linux平台下的存储介质,LVM逻辑卷.RAID 磁盘陈列等

大纲:

1-1  硬盘的分类及使用fdisk分区工具
       1-1-1 认识硬盘的分类和特性、SCSI、IDE、SAS、SATA、SSD、硬盘的尺寸和用途
       1-1-2使用fdisk对磁盘进行操作,分区,格式化(重点)、fdisk、mkfs使用
       1-1-3开机自动挂载分区、配置/etc/fstab

1-2 实战:使用parted分区工具及拓展swap分区
       1-2-1 使用patred操作大雨等于4T硬盘(重点)parted
       1-2-2扩展服务器swap内存空间swapon、swapoff、free -m


====================================================
1-1  硬盘的分类及使用fdisk分区工具
       1-1-1 认识硬盘的分类和特性

       1、SCSI硬盘 (Small Computer System Interface)并行
       (小型计算机系统接口)广泛应用于小型机上的高速数据传输技术

       特点:应用范围广、多任务、带宽大、CPU占用率低,以及热插拔等优点,但较高的价格使得它很难如IDE硬盘般普及
       应用范围:中、高端服务器和高档工作站中
       2、IDE硬盘 (Integrated Drive Eletronics)(电子集成驱动器)并行?

把盘体与控制器集成在一起,减少了硬盘接口的电缆数目与长度.
数据传输的可靠性得到了增强,硬盘制造起来变得更容易,
因为硬盘生产厂商不需要再担心自己的硬盘是否与其它厂商生产的控制器兼容。
对用户而言,硬盘安装起来也更为方便。
       特点:价格低廉、兼容性强
       应用范围:
       3、SAS (Serial Attached SCSI)即串行连接SCSI,是新一台SCSI技术

和现在流行的Serial ATA(SATA)硬盘相同,
都是采用串行技术以获得更高的传输速度,
并通过缩短连结线改善内部空间等。
SAS是并行SCSI接口之后开发出的全新接口。
此接口的设计是为了改善存储系统的效能、可用性和扩充性,
并且提供与SATA硬盘的兼容性。

       4、SATA(Serial ATA)

硬盘SATA接口:使用SATA(Serial ATA)接口的硬盘又叫串口硬盘,是未来和现在PC机硬盘的主流趋势。
2001年,由Intel、APT、Dell、IBM、希捷、迈拓这几大厂商组成的Serial ATA委员会正式确立了Serial ATA 1.0规范
2002年,虽然串行ATA的相关设备还未正式上市,但Serial ATA委员会已抢先确立了Serial ATA 2.0规范。
Serial ATA采用串行连接方式,串行ATA总线具备了更强的纠错能力,与以往相比其最大的区别在于能对传输指令(不仅仅是数据)进行检查,如果发现错误会自动矫正,这在很大程度上提高了数据传输的可靠性。
SAS与SATA的接口区别

       5、SSD
固态硬盘在接口的规范和定义、功能及使用方法上与普通硬盘的完全相同.
在产品外形和尺寸上也完全与普通硬盘一致。
被广泛应用于军事、车载、工控、视频监控、网络监控、网络终端、电力、医疗、航空、导航设备等领域。

读写速度快:采用闪存作为存储介质,读取速度相对机械硬盘更快。
最常见的7200转机械硬盘的寻道时间一般为12-14毫秒,而固态硬盘可以轻易达到0.1毫秒甚至更低。

低功耗:固态硬盘的功耗要低于传统硬盘。
无噪音:固态硬盘没有机械马达和风扇,工作时噪音值为0分贝。由于固态硬盘采用无机械部件的闪存芯片,所以具有了发热量小、散热快等特点。
工作温度范围大:典型的硬盘驱动器只能在5到55摄氏度范围内工作。
轻便:固态硬盘在重量方面更轻,与常规1.8英寸硬盘相比,重量轻20-3

       硬盘的尺寸和用途可分为
       0.85英寸,多用于手机等便携装置中;
       1英寸, 多用于数码相机;
       1.8英寸,用于部分笔记本电脑;
       2.5英寸,常用于笔记本电脑;
       3.5英寸,多用于台式电脑中。采用3.5"硬盘的外置硬盘盒需要外接电源;
       5.25英寸,多为早期之台式电脑使用。今已无厂商生产。

       1-1-2使用fdisk对磁盘进行操作,分区,格式化(重点)

       正常使用一块磁盘步骤
       购买硬盘-->连接硬盘-->磁盘分区-->格式化硬盘(创建文件系统)
       -->磁盘挂载(设置开机自动挂载)-->正常使用
       一般磁盘文件存放在linux系统中的/dev目录下,可使用ls命令查看,
       磁盘文件的命名规则
例如:/dev/sda1
sda1对应磁盘名称,其中前两个字符代表硬盘的类型(SAS、SCSI、SATA等),
其中sd代表SCSI硬盘,hd代表SATA硬盘
(在虚拟机中体现不出来)
sda1中a表示是第一块,b是第二块,以此类推
sda1中1,2,3,4代表是主分区,5-9代表是逻辑分区
sd=SCSI接口类型的硬盘
hd=IDE接口类型的硬盘
[abcd]=代表第几块
[1234]=主分区
[56789]=扩展分区/逻辑分区

       实战:使用fdisk管理分区
fdisk简介及用法

[root@xiaogan ~]# fdisk --help
fdisk: invalid option -- -
Usage:
fdisk [options] <disk>    change partition table
fdisk [options] -l <disk> list partition table(s) #查看磁盘分区表
fdisk -s <partition>      give partition size(s) in blocks #查看磁盘分区的块大小

Options:
-b <size>            sector size (512, 1024, 2048 or 4096) #设置磁盘块大小
-c[=<mode>]          compatible mode: dos or nondos (default)#?
-h                    print this help text #打印帮助信息
-u[=<unit>]          display units: cylinders or sectors (default) #?
-v                    print program version #打印fdisk版本信息
-C <number>          specify the number of cylinders
-H <number>          specify the number of heads
-S <number>          specify the number of sectors per track
使用命令 fdisk -l #查看磁盘分区表

 

[root@xiaogan ~]# fdisk -l /dev/sda

Disk /dev/sda: 21.5 GB, 21474836480 bytes, 41943040 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0x000495c5

  Device Boot      Start        End      Blocks  Id  System
/dev/sda1  *        2048      411647      204800  83  Linux
/dev/sda2          411648    29788159    14688256  8e  Linux LVM
[root@xiaogan ~]# fdisk -l

Disk /dev/sda: 21.5 GB, 21474836480 bytes, 41943040 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0x000495c5

  Device Boot      Start        End      Blocks  Id  System
/dev/sda1  *        2048      411647      204800  83  Linux
/dev/sda2          411648    29788159    14688256  8e  Linux LVM

Disk /dev/sdb: 21.5 GB, 21474836480 bytes, 41943040 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes


Disk /dev/mapper/rhel-root: 10.7 GB, 10737418240 bytes, 20971520 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes


Disk /dev/mapper/rhel-swap: 4294 MB, 4294967296 bytes, 8388608 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
第一步:添加硬盘,并开机检查,是否添加成功
[root@xiaogan ~]# ls /dev/sdb*
/dev/sdb
[root@xiaogan ~]#

第二步:使用fdisk命令对磁盘分区

输入m,查看帮助信息:
Command (m for help): m
Command action
   a   toggle a bootable flag   #设置可启动标记
   b   edit bsd disklabel          #设置一个bsd磁盘标记
   c   toggle the dos compatibility flag   #设置dos兼容标记
   d   delete a partition           #删除分区
   g   create a new empty GPT partition table  #新建一个空的GPT分区表
   G   create an IRIX (SGI) partition table   #新建一个SGI分区表
   l   list known partition types     #列出已知分区类型
   m   print this menu        #打印帮助信息
   n   add a new partition   #添加一个新的分区
   o   create a new empty DOS partition table  #新建一个空的DOS分区表
   p   print the partition table   #打印分区表
   q   quit without saving changes  #不保存退出
   s   create a new empty Sun disklabel #创建一个空的SUN磁盘标签
   t   change a partitions system id  #修改分区ID
   u   change display/entry units  #修改显示单元(units)?
   v   verify the partition table   #检验分区表
   w   write table to disk and exit #将修改保存到分区表
   x   extra functionality (experts only) #额外的功能(专家模式)

 

对/dev/sdb执行分区操作:
fdisk /dev/sdb

[root@xiaogan ~]# fdisk /dev/sdb
Welcome to fdisk (util-linux 2.23.2).

Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.

Device does not contain a recognized partition table
Building a new DOS disklabel with disk identifier 0x0eb4f59b.

Command (m for help): n
Partition type:
  p  primary (0 primary, 0 extended, 4 free)
  e  extended
Select (default p): 
Using default response p
Partition number (1-4, default 1): 
First sector (2048-41943039, default 2048): 
Using default value 2048
Last sector, +sectors or +size{K,M,G} (2048-41943039, default 41943039): +1G
Partition 1 of type Linux and of size 1 GiB is set

Command (m for help): p

Disk /dev/sdb: 21.5 GB, 21474836480 bytes, 41943040 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0x0eb4f59b

  Device Boot      Start        End      Blocks  Id  System
/dev/sdb1            2048    2099199    1048576  83  Linux

Command (m for help): w
The partition table has been altered!

Calling ioctl() to re-read partition table.
Syncing disks.
[root@xiaogan ~]# ls /dev/sdb*
/dev/sdb  /dev/sdb1

 

第三步:使用mkfs命令制作文件系统(即格式化)
mkfs可以制作多种文件系统,如下:

[root@xiaogan ~]# mkfs  #连按两次TAB键
mkfs        mkfs.cramfs  mkfs.ext3    mkfs.fat    mkfs.msdos  mkfs.xfs   
mkfs.btrfs  mkfs.ext2    mkfs.ext4    mkfs.minix  mkfs.vfat   
[root@xiaogan ~]# mkfs

 

使用mkfs.ext4 或 mkfs -t ext4 对/dev/sdb1格式化

[root@xiaogan ~]# mkfs.ext4 /dev/sdb1
mke2fs 1.42.9 (28-Dec-2013)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
65536 inodes, 262144 blocks
13107 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=268435456
8 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks:
        32768, 98304, 163840, 229376

Allocating group tables: done                           
Writing inode tables: done                           
Creating journal (8192 blocks): done
Writing superblocks and filesystem accounting information: done

 


在未挂载系统时,可使用blkid /dev/sdb1查看磁盘文件系统类型及UUID号

[root@xiaogan ~]# blkid /dev/sdb1
/dev/sdb1: UUID="ffdfff15-a4a4-4ca7-9b55-d81323adef4d" TYPE="ext4"

 


第四步:挂载磁盘,并设置开机自动挂载
创建挂载点并挂载磁盘

[root@xiaogan ~]# mkdir /sdb1
[root@xiaogan ~]# mount /dev/sdb1 /sdb1
[root@xiaogan ~]# df | tail -1
/dev/sdb1                999320    2564    927944  1% /sdb1

 

       1-1-3开机自动挂载分区
方法1:
但是,当我们重启系统后,新建的磁盘任需要我们重新挂载,
故,需要我们对磁盘设置开机自动挂载,如下:

[root@xiaogan ~]# echo "/dev/sdb1 /sdb1 ext4 defaults 0 0" >> /etc/fstab
[root@xiaogan ~]# tail -1 /etc/fstab
/dev/sdb1 /sdb1 ext4 defaults 0 0

方法2:

或使用vim命令,编辑/etc/fstab,并添加/dev/sdb1 /sdb1 ext4 defaults 0 0
然后,卸载磁盘,并执行mount -a命令检查,是否设置成功
检查:

[root@xiaogan ~]# umount /dev/sdb1
[root@xiaogan ~]# mount -a
[root@xiaogan ~]# df | tail -1
/dev/sdb1                999320    2564    927944  1% /sdb1

 

方法3:(通用)使用UUID设置自动挂载
UUID作用
UUID是一个标识你系统中的存储设备的字符串,其目的是帮助使用者唯一的确定系统中的所有存储设备,全球唯一,不管它们是什么类型的。它可以标识DVD驱动器,USB存储设备以及你系统中的硬盘设备等。
一般在设置自动挂载磁盘时,我们都会使用磁盘的UUID来设置自动挂载
磁盘的UUID,是全球唯一的,所以,避免了开机自动挂载重名问题

[root@xiaogan ~]# blkid /dev/sdb1
/dev/sdb1: UUID="ffdfff15-a4a4-4ca7-9b55-d81323adef4d" TYPE="ext4"
[root@xiaogan ~]# echo "UUID=ffdfff15-a4a4-4ca7-9b55-d81323adef4d /sdb1 ext4 defaults 0 0" >> /etc/fstab
[root@xiaogan ~]# tail -1 /etc/fstab
UUID=ffdfff15-a4a4-4ca7-9b55-d81323adef4d /sdb1 ext4 defaults 0 0
[root@xiaogan ~]# 

 

1-2 实战:使用parted分区工具及拓展swap分区
       1-2-1 使用patred操作大于等于4T硬盘(重点)
fdisk无法支持 2TB 以上的分区,此时就用到 parted 这个工具。
GPT分区:
GPT,全局唯一标识分区表(GUID Partition Table),GUID,与MBR最大4个分区表项的限制相比,GPT对分区数量没有限制,但Windows最大仅支持128个GPT分区。GPT可管理硬盘大小达到了18EB(1EB=1024PB=1,048,576TB),不过NTFS格式最大仅支持256TB。
Parted 磁盘分区工具
parted是Linux中磁盘分区管理的高级工具
       当我们遇到容量大于等于4T的硬盘时,fdisk命令就不适用了。
这时,我们会用到另一个命令parted

[root@xiaogan ~]# parted --help
Usage: parted [OPTION]... [DEVICE [COMMAND [PARAMETERS]...]...] #格式
Apply COMMANDs with PARAMETERS to DEVICE.  If no COMMAND(s) are given, run in
interactive mode. #当没有命令参数时,运行在交互模式

OPTIONs:#选项
  -h, --help                      displays this help message #帮助
  -l, --list                      lists partition layout on all block devices #列出所有块设备分区列表
  -m, --machine                  displays machine parseable output #显示机器可解析的输出
  -s, --script                    never prompts for user intervention #不给用户提示信息
  -v, --version                  displays the version #版本
  -a, --align=[none|cyl|min|opt]  alignment for new partitions #对齐新分区

COMMANDs:
  align-check TYPE N             check partition N for TYPE(min|opt) alignment #对第N分区对齐检查 
  help [COMMAND]                          print general help, or help on COMMAND #command帮助
  mklabel,mktable LABEL-TYPE              create a new disklabel (partition table)#新建分区表
  mkpart PART-TYPE [FS-TYPE] START END    make a partition #新建分区
  name NUMBER NAME                        name partition NUMBER as NAME #分区命名
  print [devices|free|list,all|NUMBER]    display the partition table, available devices, free space, all found partitions, or a particular
        partition #打印分区表
  quit                                    exit program #退出
  rescue START END                        rescue a lost partition near START and END #救援分区..设置开头结尾
  rm NUMBER                                delete partition NUMBER #删除分区
  select DEVICE                            choose the device to edit #选择操作磁盘
  disk_set FLAG STATE                      change the FLAG on selected device #设置磁盘标签
  disk_toggle [FLAG]                      toggle the state of FLAG on selected device #修改磁盘标签状态
  set NUMBER FLAG STATE                    change the FLAG on partition NUMBER #修改分区标签
  toggle [NUMBER [FLAG]]                  toggle the state of FLAG on partition NUMBER #修改分区标签状态
  unit UNIT                                set the default unit to UNIT #设置默认UNIT
  version                                  display the version number and #版本信息
        copyright information of GNU Parted

Report bugs to bug-parted@gnu.org

 

       实战:使用parted分区工具,GPT分区
第一步:检查安装

[root@xiaogan ~]# rpm -qf `which parted`
parted-3.1-23.el7.x86_64
[root@xiaogan ~]# 

若未安装,可使用如下命令进行安装

rpm -ivh /mnt/Packages/parted-3.1-23.el7.x86-64.rpm
or
yum install parted
第二步:对磁盘进行分区
可使用parted -l 查看所有磁盘分区情况

[root@xiaogan ~]# parted /dev/sdb
GNU Parted 3.1
Using /dev/sdb
Welcome to GNU Parted! Type help to view a list of commands.
(parted) mklabe GPT                                                     
Warning: The existing disk label on /dev/sdb will be destroyed and all data on this disk will
be lost. Do you want to continue? #这将摧毁/dev/sdb上所有数据
Yes/No? Yes #确认
(parted) mkpart     #交互式新建分区                                                    
Partition name?  []?                                                     
File system type?  [ext2]? xfs                                                           
Start? 1000                                                             
End? 1000000        #设置分区起始位置                                                     
Error: The location 1000000 is outside of the device /dev/sdb.
(parted) p
Model: VMware, VMware Virtual S (scsi)
Disk /dev/sdb: 21.5GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:

Number  Start  End  Size  File system  Name  Flags #划横线这部分,是没有新建成功的案例

(parted) mkpart primary 0 1000 #新建分区
Warning: The resulting partition is not properly aligned for best performance.
Ignore/Cancel? Ignore  #新建的分区太小,大一点就不会出现警告信息了                                                 
(parted) p                                                               
Model: VMware, VMware Virtual S (scsi)
Disk /dev/sdb: 21.5GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:

Number  Start  End    Size    File system  Name    Flags
1      17.4kB  1000MB  1000MB              primary

(parted) q                                                               
Information: You may need to update /etc/fstab.
[root@xiaogan ~]# ls /dev/sdb*
/dev/sdb  /dev/sdb1
[root@xiaogan ~]# 
Number  Start    End         Size          File system  Name    Flags 
1            17.4kB  1000MB  1000MB                      primary

 

参数解释:
Number:这个就是分区的号举例来说,1号代表的是 /dev/sdb1 的意思;
Start:起始的磁柱位置;
End:结束的磁柱位置;
Size: 分区有多少容量;
Type:就是分区的类型,有primary, extended, logical等类型;
File system:就如同 fdisk 的 System ID 之意。
使用blkid /dev/sdb1命令查看分区信息
[root@xiaogan ~]# blkid /dev/sdb1
/dev/sdb1: PARTLABEL="primary" PARTUUID="6cdf6afd-5771-45e6-b809-72188dab63f5" 

 

第三步:格式化分区,并挂载

[root@xiaogan ~]# mkfs.xfs /dev/sdb1
meta-data=/dev/sdb1              isize=256    agcount=4, agsize=61034 blks
        =                      sectsz=512  attr=2, projid32bit=1
        =                      crc=0        finobt=0
data    =                      bsize=4096  blocks=244136, imaxpct=25
        =                      sunit=0      swidth=0 blks
naming  =version 2              bsize=4096  ascii-ci=0 ftype=0
log      =internal log          bsize=4096  blocks=853, version=2
        =                      sectsz=512  sunit=0 blks, lazy-count=1
realtime =none                  extsz=4096  blocks=0, rtextents=0
[root@xiaogan ~]# mount /dev/sdb1 /sdb1
[root@xiaogan ~]# df | tail -1
/dev/sdb1                973132  32928    940204  4% /sdb1
[root@xiaogan ~]# 

 

       1-2-2扩展服务器swap内存空间
Swap分区在系统的物理内存不够用的时候,把硬盘空间中的一部分空间释放出来,以供当前运行的程序使用。那些被释放的空间可能来自一些很长时间没有什么操作的程序,这些被释放的空间被临时保存到Swap分区中,等到那些程序要运行时,再从Swap分区中恢复保存的数据到内存中。

SWAP 分区在一些情况下可以提升 Linux 操作系统性能,但在某些情况下又会成为系统运行的瓶颈,下面我们就来详细介绍下 Linux 中的 SWAP 交换分区


SWAP 交换分区是用来存放内存溢出来的数据。
我们可以将内存想像成一个盆子,运行程序时的数据都被作为水放在内存这个盆子当中。
如果你运行太多的应用程序,导致水过多而(内存这个)盆子已经装不下时,就会将多于部分的水装到 SWAP 交换分区当中。

优点:
内存用完时,提供更多运行空间

mkswap /swap (格式化成swap格式)
swapon /swap (激活/swap,加入到swap分区中)
vim /etc/fstab (开机自启动新添加的swap分区)
—>添加
/swap swap swap defaults 0 0
如果不想使用需要删除,只需要执行#swapoff /swap
第一步:新建磁盘分区

[root@xiaogan ~]# ls /dev/sdb*
/dev/sdb  /dev/sdb1
[root@xiaogan ~]# parted /dev/sdb
GNU Parted 3.1
Using /dev/sdb
Welcome to GNU Parted! Type help to view a list of commands.
(parted) mkpart primary 1000 5000 #创建分区
(parted) p       #打印信息,检查                                                        
Model: VMware, VMware Virtual S (scsi)
Disk /dev/sdb: 21.5GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:

Number  Start  End    Size    File system  Name    Flags
1      17.4kB  1000MB  1000MB  xfs          primary
2      1000MB  5000MB  3999MB              primary

(parted) q                   #退出                                            
Information: You may need to update /etc/fstab.

[root@xiaogan ~]# ls /dev/sdb*    #检查                                       
/dev/sdb  /dev/sdb1  /dev/sdb2

 

第二步:格式化成swap分区
mkswap /dev/sdb2  #格式化swap分区

[root@xiaogan ~]# mkswap /dev/sdb2
Setting up swapspace version 1, size = 3905532 KiB
no label, UUID=c51301cc-a661-498b-acb6-d88e56900ed6
第三步:查看当前swap分区大小,启用swap分区后,再次查看
swapon /dev/sdb2  #启用/dev/sdb2 swap分区
swapoff /dev/sdb2  #停用/dev/sdb2 swap分区
free -m                    #查看内存使用信息
[root@xiaogan ~]# free -m #查看内存使用信息
              total        used        free      shared  buff/cache  available
Mem:          1985        320        1320          9        344        1489
Swap:          4095          0        4095
[root@xiaogan ~]# swapon /dev/sdb2 #启用/dev/sdb2 swap分区
[root@xiaogan ~]# free -m
              total        used        free      shared  buff/cache  available
Mem:          1985        322        1318          9        344        1487
Swap:          7909          0        7909
[root@xiaogan ~]# swapoff /dev/sdb2 #停用/dev/sdb2 swap分区
[root@xiaogan ~]# free -m
              total        used        free      shared  buff/cache  available
Mem:          1985        320        1320          9        344        1489
Swap:          4095          0        4095
[root@xiaogan ~]# 

 


第四步:设置开机自动挂载
vim /etc/fstab #编辑启动挂载文件,添加如下一行:
/dev/sdb2 swap swap defaults 0 0

 

1-13 RHEL7-硬盘介绍和磁盘管理

标签:

原文地址:http://www.cnblogs.com/xiaogan/p/5776228.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!