文件系统常用命令与fdisk分区

一、硬盘结构

1、硬盘的逻辑结构

文件系统常用命令与fdisk分区
硬盘的大小是使用“磁头数×柱面数×扇区数×每个扇区的大小”这样的公式来计算的。其中磁头数(Heads)表示硬盘总共有几个磁头,也可以理解成为硬盘有几个盘面,然后乘以二;柱面数 (Cylinders)表示硬盘每一面盘片有几条磁道;扇区数(Sectors)表示每条磁道上有几个扇区;每个扇区的大小一般为 512Byte。扇区也是磁盘的最小存贮单位。

2、硬盘接口
  • IDE 硬盘接口(Integrated Drive Electronics,并口,即电子集成驱动器)也称作“ATA 硬盘” 或“PATA 硬盘”,是早期机械硬盘的主要接口,ATA133 硬盘的理论速度可以达到 133MB/s (此速度为理论平均值)。
  • SATA 接口(Serial ATA,串口)是速度更高的硬盘标准,具备了更高的传输速度,并具备了更强的纠错能力。目前已经是 SATA 三代,理论传输速度达到 600MB/s(此速度为理论平均值)
  • SCSI 接口(Small Computer System Interface,小型计算机系统接口)广泛应用在服务器上, 具有应用范围广、多任务、带宽大、CPU 占用率低及支持热插拔等优点,理论传输速度达到 320MB/s

二、linux文件系统

1. Linux 文件系统的特性
  • super block(超级块):记录整个文件系统的信息,包括 block 与 inode 的总量,已经使用的 inode 和 block 的数量,未使用的 inode 和 block 的数量,block 与 inode 的大小,文件系统的挂载时间,最近一次的写入时间,最近一次的磁盘检验时间等。
  • date block(数据块,也称作 block):用来实际保存数据的,block 的大小(1KB、2KB 或 4KB)和数量在格式化后就已经决定,不能改变,除非重新格式化。每个 blcok 只能保存一个文件的数据,要是文件数据小于一个 block 块,那么这个 block 的剩余空间不能被其他文件使用,要是文件数据大于一个 block 块,则占用多个 block 块。Windows 中磁盘碎片整理 工具的原理就是把一个文件占用的多个 block 块尽量整理到一起,这样可以加快读写速度。
  • inode:用来记录文件的权限(r、w、x),文件的所有者和属 组,文件的大小,文件的状态改变时间(ctime),文件的最近一次读取时间(atime),文件的最近一次修改时间(mtime),文件的数据真正保存的 block 编号。每个文件需要占用一个 inode。
2、常见文件系统
文件系统 简介
ext Linux 中最早的文件系统,由于在性能和兼容性上具有很多缺陷,现在已经很少使用
ext2 是 ext 文件系统的升级版本,Red Hat Linux 7.2 版本以前的系统默认都是 ext2 文件 系统。于 1993 年发布,支持最大 16TB 的分区和最大 2TB 的文件 (1TB=1024GB=1024×1024KB)
ext3 是 ext2 文件系统的升级版本,最大的区别就是带日志功能,以便在系统突然停止时 提高文件系统的可靠性。支持最大 16TB 的分区和最大 2TB 的文件
ext4 是 ext3 文件系统的升级版。ext4 在性能、伸缩性和可靠性方面进行了大量改进。ext4 的变化可以说是翻天覆地的,比如向下兼容 ext3、最大 1EB 文件系统和 16TB 文件、无 限数量子目录、Extents 连续数据块概念、多块分配、延迟分配、持久预分配、快速 FSCK、 日志校验、无日志模式、在线碎片整理、inode 增强、默认启用 barrier 等。它是 CentOS 6.x 的默认文件系统
xfs XFS 最早针对 IRIX 操作系统开发,是一个高性能的日志型文件系统,能够在断电以及 操作系统崩溃的情况下保证文件系统数据的一致性。它是一个 64 位的文件系统,后来 进行开源并且移植到了 Linux 操作系统中,目前 CentOS 7.x 将 XFS+LVM 作为默认的文 件系统。据官方所称,XFS 对于大文件的读写性能较好。
swap swap 是 Linux 中用于交换分区的文件系统(类似于 Windows 中的虚拟内存),当内存 不够用时,使用交换分区暂时替代内存。一般大小为内存的 2 倍,但是不要超过 2GB。 它是 Linux 的必需分区
NFS NFS 是网络文件系统(Network File System)的缩写,是用来实现不同主机之间文件 共享的一种网络服务,本地主机可以通过挂载的方式使用远程共享的资源
iso9660 光盘的标准文件系统。Linux 要想使用光盘,必须支持 iso9660 文件系统
fat 就是 Windows 下的 fat16 文件系统,在 Linux 中识别为 fat
vfat 就是 Windows 下的 fat32 文件系统,在 Linux 中识别为 vfat。支持最大 32GB 的分区 和最大 4GB 的文件
NTFS 就是 Windows 下的 NTFS 文件系统,不过 Linux 默认是不能识别 NTFS 文件系统的,如 果需要识别,则需要重新编译内核才能支持。它比 fat32 文件系统更加安全,速度更快, 支持最大 2TB 的分区和最大 64GB 的文件
proc Linux 中基于内存的虚拟文件系统,用来管理内存存储目录/proc
sysfs 和 proc 一样,也是基于内存的虚拟文件系统,用来管理内存存储目录/sysfs
tmpfs 也是一种基于内存的虚拟文件系统,不过也可以使用 swap 交换分区

三、常用的硬盘管理命令

df 查看分区的使用情况
[root@centos ~]# df  -h
Filesystem                    Type   Size  Used Avail Use% Mounted on
/dev/mapper/vg_centos-lv_root ext4    18G  1.9G   15G  12% /
tmpfs                         tmpfs  491M     0  491M   0% /dev/shm
/dev/sda1                     ext4   477M   34M  418M   8% /boot
2、du 统计文件大小
[root@centos ~]# du -h #统计当前文件大小
76K	.
3、fsck 文件系统修复命令
[root@centos ~]# fsck -y /dev/sda1     #自动修复/dev/sda1
fsck from util-linux-ng 2.17.2
e2fsck 1.41.12 (17-May-2010)
/dev/sda1 is mounted.
e2fsck: Cannot continue, aborting.
4、dumpe2fs 显示磁盘状态
[root@centos ~]# dumpe2fs /dev/mapper/vg_centos-lv_root -h
dumpe2fs 1.41.12 (17-May-2010)
Filesystem volume name:   <none>  # 卷标名
Last mounted on:          /       # 挂载目录
Filesystem UUID:          92e4492e-b1a7-4e8b-a82f-09ba6afedc08   
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 large_file 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:              1152816   # inode数量
Block count:              4605952  # block 数量
Reserved block count:     230297
Free blocks:              4027007  # 可使用的block块
Free inodes:              1096540  # 可使用de inode
First block:              0
Block size:               4096    # 一个block数量4096bytes
Fragment size:            4096
......
5、查看文件的详细信息
[root@centos ~]# stat 123.txt
  File: `123.txt'
  Size: 0         	Blocks: 0          IO Block: 4096   regular empty file
 #文件大小               占用块              系统分区块大小 
Device: fd00h/64768d	Inode: 924444          Links: 1
                    #存放文件的设备 inode 号    硬链接数
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
            权限                  属主                   属组 
Access: 2019-12-03 10:34:25.644828377 +0800  #访问时间
Modify: 2019-12-03 10:34:25.644828377 +0800  #文件数据修改时间
Change: 2019-12-03 10:34:25.644828377 +0800  #文件状态修改时间
6、判断文件类型
file  文件名   判断文件类型  
type  命令名   判断命令类型 

四、fdisk 命令手工分区

1 fdisk -l 查看系统所有硬盘及分区
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: 0x00000000
.....
2、使用fdisk手工分区,首先需要准备一块新硬盘,虚拟机直接添加即可。

1)进入分区界面

fdisk /dev/sdb
输入 m 获取帮助
   a   toggle a bootable flag   设置可引导标记
   b   edit bsd disklabel       编辑 bsd 磁盘标签  
   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    创建dos分区表
   p   print the partition table       打印分区列表
   q   quit without saving changes     离开不保存修改
   s   create a new empty Sun disklabel   新建空白 SUN 磁盘标签
   t   change a partition's system id    改变一个分区的系统 ID
   u   change display/entry units       改变显示记录单位
   v   verify the partition table      验证分区表
   w   write table to disk and exit    写入分区信息,且退出
   x   extra functionality (experts only)   附加功能

2)简单分区

# 建立一个主分区
Command (m for help): n   #创建新分区
Command action
   e   extended
   p   primary partition (1-4)
p                         #创建分区类型   主分区,或者扩展分区。主分区+扩展分区一共只能有4个。
Partition number (1-4): 1  #选择分区号,这里选择了1,所以该分区名为:sdb1
First cylinder (1-2610, default 1): #起始柱面,默认就行
Using default value 1
Last cylinder, +cylinders or +size{K,M,G} (1-2610, default 2610): +2G   #指定分区大小,这里为2G,不带单位为柱面数。

Command (m for help): p  #此时在打印分区信息,就可以看到已经分好了的sdb1

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: 0x65072461

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1               1         262     2104483+  83  Linux

建立扩展分区
Command (m for help): n
Command action
   e   extended
   p   primary partition (1-4)
e
Partition number (1-4): 2
First cylinder (263-2610, default 263): 
Using default value 263
Last cylinder, +cylinders or +size{K,M,G} (263-2610, default 2610): #不输入,默认到最后一个柱面,也就是使用全部剩余空间。
Using default value 2610

扩展分区建立完成后不能使用,还需要在扩展分区内建立逻辑分区。
我们来建立逻辑分区,逻辑分区会自动分配id,无需手动输入
Command (m for help): n
Command action
   l   logical (5 or over)
   p   primary partition (1-4)
l
First cylinder (263-2610, default 263): 
Using default value 263
Last cylinder, +cylinders or +size{K,M,G} (263-2610, default 2610): +5G

Command (m for help): p

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: 0xa080c4f9

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1               1         262     2104483+  83  Linux
/dev/sdb2             263        2610    18860310    5  Extended
/dev/sdb5             263         916     5253223+  83  Linux

按 w 保存退出
Command (m for help): w
The partition table has been altered!

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

3 partprobe 强制重读所有分区文件,重新挂载分区文件内所有分区。

这不是分区必须命令,如果没有提示重启,可以不执行,也可以重启系统。

4 格式化

建立文件系统 ext3 是 linux 默认文件系统

mkfs  -t  ext4  /dev/sdb1   
mkfs  -t  ext4  /dev/sdb5

mkfs 命令非常简单易用,不过是不能调整分区的默认参数的(比如块大小是 4096),这些默认 参数除非特殊情况,否则不需要调整,如果想要调整就需要使用 mke2fs 命令进行重新格式化,
命令 格式如下: [root@localhost ~]# mke2fs [选项] 分区设备文件名 
选项:  
-t 文件系统: 指定格式化成哪个文件系统,如 ext2,ext3,ext4  
-b 字节:  指定 block 块的大小  
-i 字节:  指定“字节/inode”的比例,也就是多少个字节分配一个 inode  
-j:   建立带有 ext3 日志功能的文件系统  
-L 卷标名:  给文件系统设置卷标名,就不使用 e2label 命令设定了
举个例子: 
[root@centos ~]# mke2fs -t ext4  -b 4096  /dev/sdb5  # 格式化分区,并指定 block 的大小为 4096字节 
5 建立挂载点
linux,只有当分区被挂载才能被使用
[root@centos ~]# mkdir /mnt/sdb1
[root@centos ~]# mkdir /mnt/sdb5
6 挂载
mount  /dev/sdb1  /mnt/sdb1
mount  /dev/sdb5  /mnt/sdb5
7 查看
[root@centos ~]# cd /mnt/sdb1
[root@centos sdb1]# df . -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/sdb1       2.0G  3.1M  1.9G   1% /mnt/sdb1

8 自动挂载

修改分区自动挂载文件 vim /etc/fstab

 /dev/sdb1               /mnt/sdb1          ext4         defaults        1 2
第一列: 设备文件名    
第二列  挂载点    
第三列  文件系统    
第四列  挂载选项 
第五列  是否可以被备份  0 不备份  1 每天备份 2 不定期备份    
第六列  是否检测磁盘 fsck 0 不检测  1 启动时检测 2 启动后检测 
9 测试
重启测试
或者使用 mount  -a 重新自动挂载fstab内未挂在设备。

五、手动swap分区

1、并修改为 swap 分区 ID
# 新建一个主分区。
Command (m for help): n
Command action
   e   extended
   p   primary partition (1-4)
p
Partition number (1-4): 1
First cylinder (1-2610, default 1): 
Using default value 1
Last cylinder, +cylinders or +size{K,M,G} (1-2610, default 2610): +1G

Command (m for help): t  #更改分区类型
Selected partition 1  #选择分区
Hex code (type L to list codes): 82   # 类型id,这里82对应swap类型分区
Changed system type of partition 1 to 82 (Linux swap / Solaris)

Command (m for help): p
   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1               1         132     1060258+  82  Linux swap / Solaris
2、格式化
[root@centos ~]# mkswap /dev/sdb1
Setting up swapspace version 1, size = 1060252 KiB
no label, UUID=e210e3c6-9ad7-4b33-88b3-74234159c794
3、使用 swap 分区
#先查看系统swap分区大小
[root@centos ~]# free -h
             total       used       free     shared    buffers     cached
Mem:          474M       140M       333M       236K        11M        46M
-/+ buffers/cache:        83M       391M
Swap:         1.9G         0B       1.9G

#启动我们刚才添加的分区
[root@centos ~]# swapon /dev/sdb1

#再次查看
[root@centos ~]# free -h
             total       used       free     shared    buffers     cached
Mem:          474M       141M       333M       236K        11M        46M
-/+ buffers/cache:        83M       390M
Swap:         2.9G         0B       2.9G

4、取消使用
[root@centos ~]# swapoff /dev/sdb1
5、自动挂载
[root@centos ~]# vim /etc/fstab

/dev/sdb1         swap                    swap    defaults        0 0