Linux磁盘管理

磁盘知识体系概括

机械硬盘和固态硬盘

机械磁盘剖开图

 

磁盘工作的视频动画,主轴转动,机械手读写

磁盘结构详解

磁盘外部结构

组成

主要由三部分组成:盘片、主轴(机械硬盘)、磁头。

转速

SAS硬盘,根据转速来划分,有常见的三种

7200转      容量在1TB~10TB

10K转        容量在300G~1.8T

15k转         容量在300G~900G

注:转速的表达用rpm,即round per minute

接口类型

磁盘接口:水壶的壶嘴,定义与服务器如何连接,将决定数据的读写速度

SATA, 也叫串口

SCSI,最早用于高端服务器,特点就是速度快,造价高

SAS,既要scsi的性能,又要sata的方便,就诞生了SAS

PCI-E,最初主要用于快速的设备价格最高,速度最快,网卡、显卡。慢慢的出现了硬盘,现在主要用于固态硬盘

机械硬盘一般用SATA、SAS;固态硬盘sata、sas、pci-e都有用

百度不同接口的图片,以他们的区别不同

磁盘内部组成

磁头(Head)

由上到下,从0开始编号

盘面数量 == 磁头数量

作用:用来写入和读取数据的

磁道(Track)

由外向内,从0开始编号

以主轴为中心的不同的圆环区域(呼啦圈)

扇区(Sector)

一个磁道上面的最小单位,从数字1开始

默认大小512字节

柱面(Cylinder)

不同盘面上相同的磁道,组成的图形(圆柱体)。

柱面的数量 == 磁道的数量

磁盘默认是按照柱面进行读写。

两种读写的方式:

磁头的切换---0磁头切换为1磁头,由电信号控制

磁道的变化(寻道)--- 机械的变化

单元块(Units)

表示一个柱面的大小(其实是固定的)

计算磁盘的大小

磁盘的大小 = 柱面数量 * 每个柱面的大小

柱面的大小 = 磁道的大小 * 磁头的数量

磁道的大小 = 扇区的大小 * 每个磁道的扇区数量

[root@learn-Linux001 ~]# fdisk -l

Disk /dev/sda: 8589 MB, 8589934592 bytes
255 heads, 63 sectors/track, 1044 cylinders
# 255磁头    63扇区/磁道        1044柱面 
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: 0x000ad34b

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *           1          26      204800   83  Linux
Partition 1 does not end on cylinder boundary.
/dev/sda2              26         124      786432   82  Linux swap / Solaris
Partition 2 does not end on cylinder boundary.
/dev/sda3             124        1045     7396352   83  Linux

计算

[root@learn-Linux001 ~]# echo 512*63|bc
32256
[root@learn-Linux001 ~]# #磁道的大小
[root@learn-Linux001 ~]# echo 512*63|bc
32256
[root@learn-Linux001 ~]# #柱面的大小
[root@learn-Linux001 ~]# echo 512*63*255|bc
8225280
[root@learn-Linux001 ~]# #磁盘的大小
[root@learn-Linux001 ~]# echo 512*63*255*1044|bc
8587192320

磁盘容量单位与常见的计算方法

位:bit

字节:Byte ,等于8bit

1kb = 1024Byte

1mb = 1024kb = 1024*1024 Byte

GB、TB、.......

但是硬件厂商的是按照1000来计算的。所以,买回来的硬盘500GB硬盘实际可以使用的是465GB左右。

[root@learn-Linux001 ~]# #将上面的结果换算成G

[root@learn-Linux001 ~]# echo 512*63*255*1044/1024/1024/1024|bc
7
[root@learn-Linux001 ~]# #结果不对,变成了7.因为bc是基础计算器,只能算整数
[root@learn-Linux001 ~]# #我们需要使用awk

[root@learn-Linux001 ~]# awk 'BEGIN{print 1/3}'
0.333333
[root@learn-Linux001 ~]# awk 'BEGIN{print 512*63*255*1044/1024/1024/1024}'
7.99745
[root@learn-Linux001 ~]# 

磁盘的选择

固态硬盘和机械硬盘的区别

diy.pconline.com.cn/750/7501340.html  固态硬盘的颗粒详细介绍

https://www.mydigitaldiscount.com/everything-you-need-to-know-about-slc-mlc-and-tlc-nand-flash.html

一、Raid卡之初识

又叫磁盘冗余阵列,阵列卡。他的主要作用有三点

1、获取更高的容量

2、获取更高的性能

3、获取更强的安全性

raid卡按支持的raid级别不同和raid卡的缓存容量不同,分为基础raid卡和高级raid卡

左边是raid基础卡,右边是高级卡。

基础卡只支持raid0和raid1

高级卡支持0、1、3、5、10、11或者更多

常见的raid级别

raid0

主要是为了应对不做raid用不了的情况。

硬盘不做raid,识别不了硬盘。所以如果只有一块硬盘,就做个raid0吧。

安全性最低,其中一个硬盘坏掉了,所有数据都会报废。

用于安全性需求低的数据,不怕丢失的数据。优点就是读写快

raid0:容量是所有硬盘之和,性能是最快的,安全性最差(只要有一块硬盘损坏,所有数据都无法使用)

raid1

只能有两块硬盘

算是个鸡肋,因为只能同时给两个硬盘做raid1。

raid1:容量是两块硬盘的一半(只能给两块硬盘做raid0),性能,读取OK,写入慢(相当于一块硬盘的性能),最多能损坏一块硬盘,两块硬盘的关系是互为镜像,

raid5

最少需要3块硬盘,在写入之前有一个校验的过程。有一块硬盘用来做校验,用来保护数据的安全性,当其中一块硬盘坏了,就可以使用校验数据恢复丢失的数据。

可以在添加一块热位盘(RAID5 + spare),当坏了一块硬盘之后,可以启动热位盘来替换坏的硬盘。

三个优点都占一点,在并发量不高的时候,可以使用

raid10

读取速度和安全性都很高,但是很奢侈,并发量很大的时候可以使用

raid10的基本原理如下:

二、磁盘分区

磁盘分区表

所在位置:0磁头0磁道1扇区的秘密

我们已经知道一个扇区的大小是512字节,那么这512字节是如何划分的呢?

前446字节:mbr主引导记录

64字节:分区表,分区一创建,表便生成

55AA:表示结束标记

主分区-扩展分区-逻辑分区的关系

系统的主分区最多有4个。

因为一个主分区一旦创立,就要在64字节的分区表中占用16个字节。

鉴于此,就有了扩展分区。

所以,扩展分区就是为了解决主分区只有4个的问题。

主分区+扩展分区最多也就是4个。

扩展分区是没法直接使用的。

要想使用,需要在扩展分区下面创建逻辑分区。

主分区

 存放数据分区,最多有4个

扩展分区

 无法直接使用

 最多只能有一个

 必须要在扩展分区中创建逻辑分区

逻辑分区

 存放数据

 在功能上和主分区没有什么区别

硬盘分区命令规则

硬盘命名

sas/sata/scsi接口,以sd开头sd?

第一块sas硬盘,取名sda

第三块sas硬盘,取名sdc

分区命名

主分区/扩展分区,1-4,如sda1

逻辑分区,从5开始

例子

第一块SAS硬盘的第一个主分区

/dev/sda1

第三块SAS硬盘的第二个扩展分区

/dev/sdc6

第四块SATA硬盘的第一个扩展分区

/dev/sdd5

fdisk进行磁盘分区详解

首先创建环境

 

一直点下一步

创建2-3个新硬盘

最后点确定

reboot

重启了查看一下

[root@luffy-001 ~]# fdisk -l|grep 'sd[a-d]:' 
Disk /dev/sda: 8589 MB, 8589934592 bytes
Disk /dev/sdb: 106 MB, 106954752 bytes
Disk /dev/sdc: 106 MB, 106954752 bytes
Disk /dev/sdd: 106 MB, 106954752 bytes

 

分区工具的使用

小于2个T的使用fdisk,大于2T就使用parted

fdisk支持MBR

题目:创建一个100M分区,把他挂载到/mnt上面

 

[root@luffy-001 ~]# fdisk /dev/sdb
# 首先是警告信息:磁盘没有分区表

Device contains neither a valid DOS partition table, nor Sun, SGI or OSF disklabel
Building a new DOS disklabel with disk identifier 0xfed34d83.
Changes will remain in memory only, until you decide to write them.
After that, of course, the previous content won't be recoverable.

Warning: invalid flag 0x0000 of partition table 4 will be corrected by w(rite)
# 有一个模式已经过时了,你可以关掉。默认磁盘在分区或者是进行读写的时候,是按照扇区,柱面,还是磁道来进行的...
# 然后,告诉了我们两个参数c和u
WARNING: DOS-compatible mode is deprecated. It's strongly recommended to
         switch off the mode (command 'c') and change display units to
         sectors (command 'u').

Command (m for help):  m  # 按下m显示帮助信息
[: unknown command
Command action
   a   toggle a bootable flag   
   b   edit bsd disklabel
   c   toggle the dos compatibility flag  # 关闭DOS的兼容模式
   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)

100M的分区,30M的主分区,30M的逻辑分区

## 加上推荐的参数cu
[root@luffy-001 ~]# fdisk -cu /dev/sdb  
Device contains neither a valid DOS partition table, nor Sun, SGI or OSF disklabel
Building a new DOS disklabel with disk identifier 0x1bbbfcff.
Changes will remain in memory only, until you decide to write them.
After that, of course, the previous content won't be recoverable.

Warning: invalid flag 0x0000 of partition table 4 will be corrected by w(rite)
## p显示分区信息:
Command (m for help): p

Disk /dev/sdb: 106 MB, 106954752 bytes
64 heads, 32 sectors/track, 102 cylinders, total 208896 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 identifier: 0x1bbbfcff

   Device Boot      Start         End      Blocks   Id  System
## 添加主分区30M:
Command (m for help): n
Command action
   e   extended   # 扩展分区
   p   primary partition (1-4)  # 主分区
p
Partition number (1-4): 1  # 编号
First sector (2048-208895, default 2048):   # 不填就是默认的2048
Using default value 2048
Last sector, +sectors or +size{K,M,G} (2048-208895, default 208895): +30M  
## 显示分区信息,已经创建好了
Command (m for help): p

Disk /dev/sdb: 106 MB, 106954752 bytes
64 heads, 32 sectors/track, 102 cylinders, total 208896 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 identifier: 0x1bbbfcff

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1            2048       63487       30720   83  Linux

Command (m for help): n
Command action
   e   extended
   p   primary partition (1-4)
e
Partition number (1-4): 2
First sector (63488-208895, default 63488): 
Using default value 63488
Last sector, +sectors or +size{K,M,G} (63488-208895, default 208895): 
Using default value 208895

Command (m for help): p

Disk /dev/sdb: 106 MB, 106954752 bytes
64 heads, 32 sectors/track, 102 cylinders, total 208896 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 identifier: 0x1bbbfcff

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1            2048       63487       30720   83  Linux
/dev/sdb2           63488      208895       72704    5  Extended
## 再创建逻辑分区
Command (m for help): n
Command action
   l   logical (5 or over)
   p   primary partition (1-4)
l  
First sector (65536-208895, default 65536): 
Using default value 65536
Last sector, +sectors or +size{K,M,G} (65536-208895, default 208895): +30M

Command (m for help): P

Disk /dev/sdb: 106 MB, 106954752 bytes
64 heads, 32 sectors/track, 102 cylinders, total 208896 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 identifier: 0x1bbbfcff

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1            2048       63487       30720   83  Linux
/dev/sdb2           63488      208895       72704    5  Extended
/dev/sdb5           65536      126975       30720   83  Linux

Command (m for help): 

## 此时,并没有在系统中生效,改变只是暂时放在内存中
Command (m for help): w   # 按w保存并退出
The partition table has been altered!

Calling ioctl() to re-read partition table.
Syncing disk

在w之前,检查一次,是不是在新的磁盘上创建分区。无误之后再按回车键,否则会发生无法挽回的错误。

在系统中已经可以查看创建的分区了

[root@luffy-001 ~]# ls -l /dev/sdb*
brw-rw---- 1 root disk 8, 16 Feb 17 17:00 /dev/sdb
brw-rw---- 1 root disk 8, 17 Feb 17 17:00 /dev/sdb1
brw-rw---- 1 root disk 8, 18 Feb 17 17:00 /dev/sdb2
brw-rw---- 1 root disk 8, 21 Feb 17 17:00 /dev/sdb5

磁盘分区--格式化--挂载流程

[root@luffy-001 ~]# fdisk -cu /dev/sdb  
# 第一次的提示信息已经没有了
## 工作中一般怎么用? 创建一个100M分区,把他挂载到/mnt上面
### 1、分区

## 先删除之前的分区
Command (m for help): d
Partition number (1-5): 1

Command (m for help): d
Partition number (1-5): 2

Command (m for help): p

Disk /dev/sdb: 106 MB, 106954752 bytes
64 heads, 32 sectors/track, 102 cylinders, total 208896 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 identifier: 0x1bbbfcff

   Device Boot      Start         End      Blocks   Id  System

Command (m for help): n
Command action
   e   extended
   p   primary partition (1-4)
p
Partition number (1-4): 1
First sector (2048-208895, default 2048):    # 把空间全部分给一个分区,直接回车
Using default value 2048
Last sector, +sectors or +size{K,M,G} (2048-208895, default 208895):   # 直接回车
Using default value 208895

Command (m for help): p

Disk /dev/sdb: 106 MB, 106954752 bytes
64 heads, 32 sectors/track, 102 cylinders, total 208896 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 identifier: 0x1bbbfcff

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1            2048      208895      103424   83  Linux
Command (m for help): w
The partition table has been altered!

Calling ioctl() to re-read partition table.
Syncing disks.



### 2、通知系统,/dev/sdb硬盘的磁盘分区表变化了
[root@luffy-001 ~]# partprobe /dev/sdb
[root@luffy-001 ~]# # 默认没有任何反应


### 3、格式化创建文件系统make filesystem
[root@luffy-001 ~]# mkfs.ext4 /dev/sdb1
mke2fs 1.41.12 (17-May-2010)
Filesystem label=
OS type: Linux
Block size=1024 (log=0)
Fragment size=1024 (log=0)
Stride=0 blocks, Stripe width=0 blocks
25896 inodes, 103424 blocks   # 诞生了inode和block
5171 blocks (5.00%) reserved for the super user
First data block=1
Maximum filesystem blocks=67371008
13 block groups
8192 blocks per group, 8192 fragments per group
1992 inodes per group
Superblock backups stored on blocks: 
    8193, 24577, 40961, 57345, 73729

Writing inode tables: done                            
Creating journal (4096 blocks): done
Writing superblocks and filesystem accounting information: done
## 下面这段话,主要意思是讲磁盘会定期自动检查,在下一步可以关闭它,提示中已经给出了命令
This filesystem will be automatically checked every 20 mounts or
180 days, whichever comes first.  Use tune2fs -c or -i to override.
[root@luffy-001 ~]# 

### 4、关闭磁盘分区的自动检查功能
[root@luffy-001 ~]# tune2fs -c 0 -i 0 /dev/sdb1
tune2fs 1.41.12 (17-May-2010)
Setting maximal mount count to -1
Setting interval between checks to 0 seconds

-c 0 count # 关闭每挂载多少次进行磁盘检查的功能
-i 0 interval # 关闭每180天进行磁盘检查功能

### 5、使用mount进行磁盘分区挂载
## 先检查是不是在使用
[root@luffy-001 ~]# df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda3       6.9G  1.9G  4.7G  29% /
tmpfs           1.9G     0  1.9G   0% /dev/shm
/dev/sda1       190M   40M  141M  22% /boot

## 如果在使用可以用umount 切掉
## 使用mount 挂载
[root@luffy-001 ~]# mount /dev/sdb1 /mnt/
[root@luffy-001 ~]# df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda3       6.9G  1.9G  4.7G  29% /
tmpfs           1.9G     0  1.9G   0% /dev/shm
/dev/sda1       190M   40M  141M  22% /boot
/dev/sdb1        94M  1.6M   88M   2% /mnt

如何进行开机自动挂载

重启服务器后,我挂载的磁盘不见了,这可如何是好?

[root@luffy-001 ~]# reboot
[root@luffy-001 ~]# 
Broadcast message from root@luffy-001
    (/dev/pts/0) at 17:42 ...

The system is going down for reboot NOW!
Connection closing...Socket close.

Connection closed by foreign host.

Disconnected from remote host(study_luffy001) at 09:49:19.

Type `help' to learn how to use Xshell prompt.
[D:\~]$ 

Connecting to 10.0.0.200:22...
Connection established.
To escape to local shell, press 'Ctrl+Alt+]'.

WARNING! The remote SSH server rejected X11 forwarding request.
Last login: Sun Feb 17 17:43:57 2019
[root@luffy-001 ~]# df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda3       6.9G  1.9G  4.7G  29% /
tmpfs           1.9G     0  1.9G   0% /dev/shm
/dev/sda1       190M   40M  141M  22% /boot
[root@luffy-001 ~]# 

自动挂载的方法

 1、/etc/rc.local

开机自启动的目录

将命令/bin/mount  /dev/sdb1  /mnt/  放在   /etc/rc.local 里面

 2、/etc/fstab

开机自动挂载的目录

[root@luffy-001 ~]# cat /etc/fstab 

#
# /etc/fstab
# Created by anaconda on Thu Jan 10 14:45:14 2019
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
# 我们可以使用 man fstab 得到这些信息
设备或者磁盘的名字 入口/挂载点 磁盘分区的类型 挂载参数 是否备份 开机是否检查
UUID=30ef1485-38f4-4bac-80c9-1812eddcb1f1 / ext4 defaults 1 1 UUID=94102f2f-e731-4636-81bc-7cb023db0068 /boot ext4 defaults 1 2 UUID=fac5852c-baa7-425c-b513-591de82cdb14 swap swap defaults 0 0 tmpfs /dev/shm tmpfs defaults 0 0 devpts /dev/pts devpts gid=5,mode=620 0 0 sysfs /sys sysfs defaults 0 0 proc /proc proc defaults 0 0

按照上面的格式将我们要挂载的磁盘写进去

vim   /etc/fstab

加入:

/dev/sdb1             /mnt          ext4        defaults     0  0

卸载磁盘

[root@luffy-001 ~]# umount /mnt

磁盘分区工具parted和GPT分区表

parted主要是给磁盘大于2TB的进行分区,当然2TB一下的也是可以使用的。

还有一点就是,parted是基于GPT分区表

GPT与MBR兼容,支持的容量级别是ZB

Parted

[root@luffy-001 ~]# parted
GNU Parted 2.1
Using /dev/sda
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) help     # 查看帮助                                                        
  align-check TYPE N                        check partition N for TYPE(min|opt) alignment
  check NUMBER                             do a simple check on the file system
  cp [FROM-DEVICE] FROM-NUMBER TO-NUMBER   copy file system to another partition
  help [COMMAND]                           print general help, or help on COMMAND
  mklabel,mktable LABEL-TYPE               create a new disklabel (partition table)   # 创建磁盘分区表
  mkfs NUMBER FS-TYPE                      make a FS-TYPE file system on partition NUMBER
  mkpart PART-TYPE [FS-TYPE] START END     make a partition    # 创建分区
  mkpartfs PART-TYPE FS-TYPE START END     make a partition with a file system
  move NUMBER START END                    move partition NUMBER
  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
  resize NUMBER START END                  resize partition NUMBER and its file system
  rm NUMBER                                delete partition NUMBER   # 删除分区
  select DEVICE                            choose the device to edit
  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
  version                                  display the version number and copyright information of GNU
        Parted
(parted) 

创建 30M 30M (因为gpt支持很多主分区,一百多个,所以扩展和逻辑分区就没用了

[root@luffy-001 ~]# parted /dev/sdc    # 给sdc做分区
GNU Parted 2.1
Using /dev/sdc
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) p            # P也可以使用                                                    
Error: /dev/sdc: unrecognised disk label                                  
(parted) print                                                            
Error: /dev/sdc: unrecognised disk label                                  
(parted) mklabel                                                          
New disk label type? gpt    #支持两种格式====>gpt和msdos(mbr)                                       
(parted) p                  #可以查看分区了                                           
Model: VMware, VMware Virtual S (scsi)
Disk /dev/sdc: 107MB
Sector size (logical/physical): 512B/512B
Partition Table: gpt

Number  Start  End  Size  File system  Name  Flags
## 创建分区30M,默认单位就是MB 
(parted) mkpart primary 0 30    
Warning: The resulting partition is not properly aligned for best performance.
Ignore/Cancel? I       # I表示忽略                                            
(parted) print                                                            
Model: VMware, VMware Virtual S (scsi)
Disk /dev/sdc: 107MB
Sector size (logical/physical): 512B/512B
Partition Table: gpt

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

## 创建下一个30M分区
(parted) mkpart primary 30 60 
(parted) p                                                                
Model: VMware, VMware Virtual S (scsi)
Disk /dev/sdc: 107MB
Sector size (logical/physical): 512B/512B
Partition Table: gpt

Number  Start   End     Size    File system  Name     Flags
 1      17.4kB  30.0MB  30.0MB               primary
 2      30.4MB  59.8MB  29.4MB               primary
## 使用parted的时候,是实时生效的,所以没有保存并退出的命令
(parted) q                                                                
Information: You may need to update /etc/fstab.                           
[root@luffy-001 ~]# ls -l /dev/sdc*
brw-rw---- 1 root disk 8, 32 Feb 17 18:23 /dev/sdc
brw-rw---- 1 root disk 8, 33 Feb 17 18:22 /dev/sdc1
brw-rw---- 1 root disk 8, 34 Feb 17 18:22 /dev/sdc2

##parted命令在命令行中也能显示和使用
[root@luffy-001 ~]# parted /dev/sdc mklabel gpt
Warning: The existing disk label on /dev/sdc will be destroyed and all data on this disk will be lost.
Do you want to continue?
Yes/No? y                                                                 
Information: You may need to update /etc/fstab.                           

[root@luffy-001 ~]# parted /dev/sdc mkpart primary 0 30 Ignore
Warning: The resulting partition is not properly aligned for best performance.
Information: You may need to update /etc/fstab.    
                       
[root@luffy-001 ~]# parted /dev/sdc mkpart primary 30 60
Warning: You requested a partition from 30.0MB to 60.0MB.                 
The closest location we can manage is 30.0MB to 30.4MB.
Is this still acceptable to you?
Yes/No? y                                                                 
Warning: The resulting partition is not properly aligned for best performance.
Ignore/Cancel? I                                                          
Information: You may need to update /etc/fstab.                           
                                     
[root@luffy-001 ~]# parted /dev/sdc p
Model: VMware, VMware Virtual S (scsi)
Disk /dev/sdc: 107MB
Sector size (logical/physical): 512B/512B
Partition Table: gpt

Number  Start   End     Size    File system  Name     Flags
 1      17.4kB  30.0MB  30.0MB               primary
 3      30.0MB  30.4MB  409kB                primary
 2      30.4MB  59.8MB  29.4MB               primary

## fsdisk也可以这么使用(非交互式应用),只是比较麻烦,可以了解一下

故障案例:java环境内存不足大量使用swap

内存不足的一种解决方法是增加内存,但是增加内存需要关机,另一种方法就是使用swap。

一般服务器会有swap空间,以防止内存使用不足。

但是有些服务器没有设置swap,比如云服务器。

这时候,需要我们临时增加swap。

1、创建一个文件块

[root@luffy-001 ~]# dd if=/dev/zero of=/tmp/100m bs=1M count=100
100+0 records in
100+0 records out
104857600 bytes (105 MB) copied, 0.317705 s, 330 MB/s

# dd 创建一个文件块
# if 输入文件,从哪里获取数据
# of 输出文件,数据放在哪里
# bs 每次复制多少数据
# count 复制多少次
## 查看文件类型
[root@luffy-001 ~]# file /tmp/100m 
/tmp/100m: data

2、变成swap

[root@luffy-001 ~]# mkswap /tmp/100m 
mkswap: /tmp/100m: warning: don't erase bootbits sectors
        on whole disk. Use -f to force.
Setting up swapspace version 1, size = 102396 KiB
no label, UUID=36c6f74c-ff57-4746-be67-b9c98b575ee3
[root@luffy-001 ~]# file /tmp/100m 
/tmp/100m: Linux/i386 swap file (new style) 1 (4K pages) size 25599 pages

3、查看swap使用情况

[root@luffy-001 ~]# free -h
             total       used       free     shared    buffers     cached
Mem:          3.7G       284M       3.4G       252K        12M       155M
-/+ buffers/cache:       116M       3.6G
Swap:         767M         0B       767M
# 如果之前查看过,就知道,这次更改并没有生效

4、swap生效

[root@luffy-001 ~]# swapon /tmp/100m 
[root@luffy-001 ~]# free -h
             total       used       free     shared    buffers     cached
Mem:          3.7G       284M       3.4G       252K        12M       155M
-/+ buffers/cache:       116M       3.6G
Swap:         867M         0B       867M

5、查看swap组成

[root@luffy-001 ~]# swapon -s
Filename                Type        Size    Used    Priority
/dev/sda2              partition    786428    0       -1
/tmp/100m              file         102396    0       -2

6、swap永久生效

## 方法一、/etc/rc.local
swapon /tmp/100m
## 方法二、/etc/fstab
/tmp/100m   swap       swap      defaults      0    0

Linux把我的内存吃了

linux特点:会把使用过的命令和数据临时存放在内存中 (cache和buffer)

以方便在下次使用的时候可以更快,提升效率

[root@luffy-001 ~]# free -h
             total       used       free     shared    buffers     cached
Mem:          3.7G       284M       3.4G       252K        12M       155M
-/+ buffers/cache:       116M       3.6G     # 这是减去buffer和cache的容量
Swap:         867M         0B       867M

www.linuxatemyram.com  尝试阅读并翻译

三、Linux文件系统

分区就是给房子打隔断,创建文件系统就是给房子装修,文件系统的类型就是装修风格,

文件在磁盘上面怎么放。

文件系统就是一种存储和组织计算机数据文件袋额机制或者方法。

之前已经说过了,我们很容易理解,通过fdisk命令对一个磁盘进行分区后,并不能直接挂在目录存放数据实体,还需要格式化操作,才可以进行挂载并存放数据。

为什么需要格式化呢?这是因为磁盘分区在没有格式化之前,操作系统是无法识别系统上磁盘分区格式的,也就无法存取文件目录属性和权限等内容,把分区格式化成操作系统支持的某个文件系统后,再存放数据,系统就会根据这个文件系统的格式化进行存取文件了。

文件系统细节

我们都知道,操作系统中的数据分为文件内容和文件属性两部分,其中文件内容就是文件的实体数据(block里),而文件属性就是文件类型、权限、属主、修改时间等信息。操作系统会将上述文件的属性内容放入磁盘文件系统的inode中,而把文件的实体数据存放在对应的block中。除了inode和block信息外,操作系统还会记录文件系统的整体信息于superblock中,这个superblock包括整个文件系统的inode和block的总的数量,已经使用的数量,剩余数量等(称之为metadata元数据)。

文件系统的每一个inode和block都有对应且唯一的数字编号,而superblock则存在于整个文件系统的最前面,它负责管理记录整个文件系统的相关信息,例如:上述的整个文件系统的inode和block的总数量,已经使用的数量,剩余数量等。

有关文件系统的inode和block知识,在linux文件属性一节,软链接和硬链接属性章节

查看文件系统的内部细节

[root@luffy-001 ~]# dumpe2fs -h /dev/sda1
dumpe2fs 1.41.12 (17-May-2010)
Filesystem volume name:   <none>
Last mounted on:          /boot
Filesystem UUID:          94102f2f-e731-4636-81bc-7cb023db0068
Filesystem magic number:  0xEF53
Filesystem revision #:    1 (dynamic)
Filesystem features:      has_journal ext_attr resize_inode dir_index filetype needs_recovery extent flex_bg sparse_super huge_file uninit_bg dir_nlink extra_isize
Filesystem flags:         signed_directory_hash 
Default mount options:    user_xattr acl
Filesystem state:         clean
Errors behavior:          Continue
Filesystem OS type:       Linux
Inode count:              51200
Block count:              204800
Reserved block count:     10240
Free blocks:              154246
Free inodes:              51161
First block:              1
Block size:               1024
Fragment size:            1024
Reserved GDT blocks:      256
Blocks per group:         8192
Fragments per group:      8192
Inodes per group:         2048
Inode blocks per group:   256
Flex block group size:    16
Filesystem created:       Thu Jan 10 14:42:18 2019
Last mount time:          Sun Feb 17 17:43:30 2019
Last write time:          Sun Feb 17 17:43:30 2019
Mount count:              11
Maximum mount count:      -1
Last checked:             Thu Jan 10 14:42:18 2019
Check interval:           0 (<none>)
Lifetime writes:          43 MB
Reserved blocks uid:      0 (user root)
Reserved blocks gid:      0 (group root)
First inode:              11
Inode size:              128
Journal inode:            8
Default directory hash:   half_md4
Directory Hash Seed:      cbc9b2e9-0a58-4fbe-b35e-7118e5eafd96
Journal backup:           inode blocks
Journal features:         (none)
Journal size:             4096k
Journal length:           4096
Journal sequence:         0x00000034
Journal start:            0

一块硬盘在文件系统角度的名词解释

常见的文件系统

openSUSE linux 的默认文件系统 ReiserFS 文件系统

IBM 的AIX使用的 jfs 日志文件系统

Centos7 采用 XFS 文件系统

Centos6 采用 ext4 文件系统

Centos5 采用 ext3 文件系统

文件系统的小结

1、文件系统是对一个存储设备上的数据和元数据进行组织的一种机制

2、分区必须格式化创建文件系统才能存放数据

3、一个分区只能有一种文件系统

4、linux下常见的文件系统ext2、ext3、ext4、zfs、xfs(centos7)和Reiserfs(单独安装)。

windos下常见的额文件系统:NTFS、FAT32、exFAT

文件系统选型简单介绍

1、SAS/SATA硬盘文件系统选择

  • reiserfs 大量小文件业务首选reiserfs(100k以内),如果是Centos需要单独安装
  • xfs 有的门户的数据库MySQL 业务会选择xfs,最数据库的支持比较好
  • ext4 视频下载,流媒体,数据库,小文件业务也OK,默认的,通用的
  • ext2 没有日志(丢失了数据无法恢复,但是数据的读写速度回提高),蓝汛的cache业务,CDN网站加速服务(相当于缓存)

常规应用:

对于 Centos5.x 系列,常规应用就选默认的 ext3 文件系统即可

对于 Centos6.x 系列,常规应用就选默认的 ext4 文件系统即可

对于 Centos7.x 系列,常规应用就选默认的 xfs 文件系统即可

注意:如果服务器数量少,怎么选择都可以

如果是海量服务器,考虑维护成本和性能,选择其中一个折中。

选择小结:

  1. Centos 默认的文件系统都是比较优秀的。
  2. xfs、reiserfs 需要单独安装,默认不支持的。
  3. 海量服务器使用多种文件系统维护可能不方便
  4. 大并发做磁盘系统的优化是一方面,但更多的还是在网站前端增加缓存服务器(squid、varnish),存储数据库的前端增加缓存(memcache、redis),这是架构师的能力。

2、SSD固态文件系统的选择

Ext4、Reiserfs可以作为SSD文件系统,但未对SSD做优化,不能充分发挥SSD的性能,影响SSD的使用时间。

Btrfs对SSD做了优化,mount通过参数启用。但Btrfs仍处于试验阶段,生产环境谨慎使用。

JEFS2/Nilfs2/YAFFS是常用的 flash file system,在嵌入式环境(手机、智能电器)广泛应用,建议使用。性能目前还未做测试评估。

在Linux中制作文件系统

看系统默认是否支持,如果支持就直接用对用命令格式化即可

磁盘部分总结与磁盘命令总结

磁盘知识体系

磁盘结构

raid

磁盘分区

磁盘格式化

文件系统

命令

 1     fdisk:磁盘分区工具                       ★★★★☆
 2     parted:磁盘分区工具                      ★★★★☆
 3     partprobe:通知系统磁盘的分区信息变化 更新内核的硬盘分区表信息            ★★★☆☆
 4     tune2fs:调整ext2/ext3/ext4文件系统参数        ★★☆☆☆
 5         -c 0 count    关闭每挂载多少次进行磁盘检查
 6         -i 0 interval 关闭每个多久进行磁盘检查
 7         关闭磁盘分区的自动检查
 8     mkfs:make filesystem 创建Linux文件系统                   ★★★☆☆
 9         -t 指定文件系统类型
10         mkfs.ext4 == mkfs -t ext4
11     dumpe2fs:显示文件系统信息       ★★☆☆☆
12     resize2fs:调整ext2/ext3/ext4文件系统大小                       ★★☆☆☆   会影响业务
13     fsck:检查并修复Linux文件系统                       ★★★☆☆  硬盘没问题不要用
14         -a
15     dd:转换或复制文件                                   ★★★☆☆
16     od  查看二进制文件的内容
17         -xa
18         dd if=/dev/sda  of=/tmp/512.bin  bs=512 count=1
19 
20         od -xa /tmp/512.bin
21 
22     mount:挂载文件系统                       ★★★★★
23     umount:卸载文件系统                       ★★★☆☆
24         umount /mnt
25     df:报告文件系统磁盘空间的使用情况                       ★★★★★
26     mkswap:创建交换分区                       ★★☆☆☆
27     swapon:激活交换分区                       ★★☆☆☆
28     swapoff:关闭交换分区                       ★★★☆☆
29     sync:刷新文件系统缓冲区                      ★★☆☆☆
30     top :查看系统性能信息
31     iotop 查看系统的磁盘读写速度 显示出进程使用swap的情况
32         io input/output 输入/输出 读写
33     htop  top升级版
34     iftop 查询网卡流量情况
35         -i 指定监视网卡
posted @ 2020-02-07 02:19  silencio。  阅读(424)  评论(0编辑  收藏  举报