返回顶部

Linux 磁盘使用及文件管理系统

Linux磁盘使用及文件系统管理基本概念

CPU, Memory(RAM), I/O

I/O: Disks(磁盘), Ehtercard(以太网)

Disks: 持久存储数据

接口类型:

  • IDE(ata):并口,133MB/s
  • SCSI:并口,Ultrascsi320, 320MB/S, UltraSCSI640, 640MB/S
  • SATA:串口,6gbps
  • SAS:串口,6gbps
  • USB:串口,480MB/s

并口:同一线缆可以接多块设备

IDE:两个,主,从

SCSI:

宽带:16-1

窄带:8-1

串口:同一线缆只可以接一个设备;

iops:io per second

硬盘:机械硬盘,固态硬盘;

机械硬盘:

  • track:磁道
  • sector:扇区,512bytes
  • cylinder:柱面

分区划分基于柱面:

平均寻道时间:

5400rpm, 7200rpm, 10000rpm, 15000rpm

Linux的哲学思想:一切皆文件

设备类型:

  • 块(block):随机访问,数据交换单位是“块”;
  • 字符(character):线性访问,数据交换单位是“字符”;

设备文件:FHS

/dev

设备文件:关联至设备的驱动程序;设备的访问入口;

设备号:

  • major:主设备号,区分设备类型;用于标明设备所需要的驱动程序;
  • minor:次设备号,区分同种类型下的不同的设备;是特定设备的访问入口;

mknod命令:

  • make block or character special files
  • mknod [OPTION]... NAME TYPE [MAJOR MINOR]
  • -m MODE:创建后的设备文件的访问权限;

设备文件名:ICANN

磁盘:

IDE: /dev/hd[a-z]

例如:/dev/hda, /dev/hdb

  • SCSI, SATA, USB, SAS: /dev/sd[a-z]

分区:

  • /dev/sda#:
  • /dev/sda1, ...

注意:CentOS 6和7统统将硬盘设备文件标识为/dev/sd[a-z]#

引用设备的方式:

  • 设备文件名
  • 卷标
  • UUID

磁盘分区:MBR, GPT

MBR:0 sector

Master Boot Record

分为三部分:

446bytes:bootloader, 程序,引导启动操作系统的程序;

64bytes:分区表,每16bytes标识一个分区,一共只能有4个分区

  • 4主分区
  • 3主1扩展:
  • n逻辑分区

2bytes:MBR区域的有效性标识;55AA为有效;

主分区和扩展分区的标识:1-4

逻辑分区:5+

fdisk命令:管理磁盘分区

1、查看磁盘的分区信息:

fdisk -l [-u] [device...]:列出指定磁盘设备上的分区情况;

 

 查看一个分区的详情

fdisk -l /dev/sda2

2、管理分区

fdisk device

fdisk提供了一个交互式接口来管理分区,它有许多子命令,分别用于不同的管理功能;所有的操作均在内存中完成,没有直接同步到磁盘;直到使用w命令保存至磁盘上;

常用命令:

  • n:创建新分区
  • d:删除已有分区
  • t:修改分区类型
  • l:查看所有已经ID
  • w:保存并退出
  • q:不保存并退出
  • m:查看帮助信息
  • p:显示现有分区信息
fdisk /dev/sda


注意:在已经分区并且已经挂载其中某个分区的磁盘设备上创建的新分区,内核可能在创建完成后无法直接识别;

 添加了一个扩展分区

查看新创建的分区是否存在:

cat /proc/partitions


通知内核强制重读磁盘分区表:

CentOS 5:

partprobe [device]

CentOS 6,7:partx, kpart

partx -a [device]
kpartx -af [device]
partx -a /dev/sda

分区创建工具:parted, sfdisk

文件系统基础

创建文件系统:

  • 格式化:低级格式化(分区之前进行,划分磁道)、高级格式化(分区之后对分区进行,创建文件系统)
  • 元数据区,数据区

元数据区:

  • 文件元数据:inode (index node)
  • 大小、权限、属主属组、时间戳、数据块指针

符号链接文件:存储数据指针的空间当中存储的是真实文件的访问路径;

  • 设备文件:存储数据指针的空间当中存储的是设备号(major, minor);

VFS: Virtual File System(虚拟网络系统)是一个类似于中间层的概念,支持大多数文件系统,如以下

  • Linux的文件系统: ext2(无日志功能), ext3, ext4, xfs, reiserfs, btrfs
  • 光盘:iso9660
  • 网络文件系统:nfs, cifs
  • 集群文件系统:gfs2, ocfs2
  • 内核级分布式文件系统:ceph
  • windows的文件系统:vfat, ntfs
  • 伪文件系统:proc, sysfs, tmpfs, hugepagefs
  • Unix的文件系统:UFS, FFS, JFS
  • 交换文件系统:swap
  • 用户空间的分布式文件系统:mogilefs, moosefs, glusterfs

文件系统管理工具:

创建文件系统的工具

  • mkf
  • mkfs.ext2, mkfs.ext3, mkfs.ext4, mkfs.xfs, mkfs.vfat, ...

检测及修复文件系统的工具

  • fsck
  • fsck.ext2, fsck.ext3, ..

查看其属性的工具

  • dumpe2fs, tune2fs

调整文件系统特性:

  • tune2fs

链接文件:访问同一个文件不同路径;

硬链接:指向同一个inode的多个文件路径;

特性:

  • (1) 目录不支持硬链接;
  • (2) 硬链接不能跨文件系统;
  • (3) 创建硬链接会增加inode引用计数;

创建:

  • ln src link_file

符号链接:指向一个文件路径的另一个文件路径;

特性:

  • (1) 符号链接与文件是两人个各自独立的文件,各有自己的inode;对原文件创建符号链接不会增加引用计数;
  • (2) 支持对目录创建符号链接,可以跨文件系统;
  • (3) 删除符号链接文件不影响原文件;但删除原文件,符号指定的路径即不存在,此时会变成无效链接;

注意:符号链接文件的大小是其指定的文件的路径字符串的字节数;

创建:

  • ln -s src link_file
  • -v:verbose

文件系统管理 

创建文件系统的工具

mkfs

  •   mkfs.ext2, mkfs.ext3, mkfs.ext4, mkfs.xfs, mkfs.vfat, ...  device(分区:、dev/sda#

检测及修复文件系统的工具

fsck

  • fsck.ext2, fsck.ext3, ...  device(分区:、dev/sda#

查看其属性的工具

  • dumpe2fs, tune2fs

调整文件系统特性:

  • tune2fs

内核级文件系统的组成部分:

  • 文件系统驱动:由内核提供
  • 文件系统箮理工具:由用户空间的应用程序提供

ext系列文件系统的管理工具:

  • mkfs.ext2, mkfs.ext3, mkfs.ext4
  • mkfs -t ext2 = mkfs.ext2

ext系列文件系统专用管理工具:mke2fs

mke2fs [OPTIONS] device

  • -t {ext2|ext3|ext4}:指明要创建的文件系统类型

  • mkfs.ext4 = mkfs -t ext4 = mke2fs -t ext4

  • -b {1024|2048|4096}:指明文件系统的块大小;

  • -L LABEL:指明卷标;

  • -j:创建有日志功能的文件系统ext3;

  • mke2fs -j = mke2fs -t ext3 = mkfs -t ext3 = mkfs.ext3

  • -i #:bytes-per-inode,指明inode与字节的比率;即每多少字节创建一个Indode;

  • -N #:直接指明要给此文件系统创建的inode的数量;

  • -m #:指定预留的空间,百分比;

  • -O [^]FEATURE:以指定的特性创建目标文件系统;

e2label命令:卷标的查看与设定

  • 查看:e2label device
  • 设定:e2label device LABEL

tune2fs命令:查看或修改ext系列文件系统的某些属性

adjust tunable filesystem parameters on ext2/ext3/ext4 filesystems;

注意:块大小创建后不可修改;

tune2fs [OPTIONS] device

  • -l:查看超级块的内容;
  • 修改指定文件系统的属性:
  • -j:ext2 --> ext3;
  • -L LABEL:修改卷标;
  • -m #:调整预留空间百分比;
  • -O [^]FEATHER:开启或关闭某种特性;
  • -o [^]mount_options:开启或关闭某种默认挂载选项 , 加 ^ 表示关闭,不加的表示开启 
  • acl 访问控制列表 (开启)
  • ^acl (关闭)

dumpe2fs命令:显示ext系列文件系统的属性信息

  • dumpe2fs [-h] device

用于实现文件系统检测的工具

因进程意外中止或系统崩溃等 原因导致定稿操作非正常终止时,可能会造成文件损坏;此时,应该检测并修复文件系统; 建议,离线进行;

ext系列文件系统的专用工具:

e2fsck : check a Linux ext2/ext3/ext4 file system

e2fsck [OPTIONS] device

  • -y:对所有问题自动回答为yes;
  • -f:即使文件系统处于clean状态,也要强制进行检测;
  • fsck:check and repair a Linux file system
  • -t fstype:指明文件系统类型;
  • fsck -t ext4 = fsck.ext4
  • -a:无须交互而自动修复所有错误;
  • -r:交互式修复;

CentOS 6如何使用xfs文件系统

yum -y install xfsprogs

创建:mkfs.xfs

检测:fsck.xfs

blkid命令

blkid device  定位/打印块设备属性

  • blkid -L LABEL:根据LABEL定位设备
  • blkid -U UUID:根据UUID定位设备


swap文件系统:

Linux上的交换分区必须使用独立的文件系统;

且文件系统的System ID必须为82;


创建swap设备:mkswap命令

mkswap [OPTIONS] device

  • -L LABEL:指明卷标
  • -f:强制


Windows无法识别Linux的文件系统; 因此,存储设备需要两种系统之间交叉使用时,应该使用windows和Linux同时支持的文件系统:fat32(vfat);

  •  mkfs.vfat device

文件系统的使用

要使用文件系统: 首先要“挂载”mount命令

umount 命令移除文件系统

根文件系统这外的其它文件系统要想能够被访问,都必须通过“关联”至根文件系统上的某个目录来实现,此关联操作即为“挂载”;此目录即为“挂载点”;

挂载点:mount_point(就是一个目录),用于作为另一个文件系统的访问入口

  • (1) 事先存在;
  • (2) 应该使用未被或不会被其它进程使用到的目录;
  • (3) 挂载点下原有的文件将会被隐藏;

mount命令:

mount [-nrw] [-t vfstype] [-o options] device dir

命令选项:

  • -r:readonly,只读挂载;
  • -w:read and write, 读写挂载;
  • -n:默认情况下,设备挂载或卸载的操作会同步更新至/etc/mtab文件中;-n用于禁止此特性;
  • -t vfstype:指明要挂载的设备上的文件系统的类型;多数情况下可省略,此时mount会通过blkid来判断要挂载的设备的文件系统类型;
  • -L LABEL:挂载时以卷标的方式指明设备;
  • mount -L LABEL dir
  • -U UUID:挂载时以UUID的方式指明设备;
  • mount -U UUID dir

-o options:挂载选项

  • sync/async:同步/异步操作;
  • atime/noatime:文件或目录在被访问时是否更新其访问时间戳;
  • diratime/nodiratime:目录在被访问时是否更新其访问时间戳;
  • remount:重新挂载;
  • acl:支持使用facl功能;
  • # mount -o acl device dir
  • # tune2fs -o acl device
  • ro:只读
  • rw:读写
  • dev/nodev:此设备上是否允许创建设备文件;
  • exec/noexec:是否允许运行此设备上的程序文件;
  • auto/noauto:
  • user/nouser:是否允许普通用户挂载此文件系统;
  • suid/nosuid:是否允许程序文件上的suid和sgid特殊权限生效;
  • defaults:Use default options: rw, suid, dev, exec, auto, nouser, async, and relatime.

一个使用技巧:

可以实现将目录绑定至另一个目录上,作为其临时访问入口;

  • mount --bind 源目录 目标目录

查看当前系统所有已挂载的设备:

  • mount
  • cat /etc/mtab
  • cat /proc/mounts

挂载光盘:

  • mount -r /dev/cdrom mount_point(目录)

光盘设备文件:/dev/cdrom, /dev/dvd

挂载U盘:

  • 事先识别U盘的设备文件;


挂载本地的回环设备(镜像文件,一般是以 iso 结尾):

  • mount -o loop /PATH/TO/SOME_LOOP_FILE MOUNT_POINT

umount命令:

umount device|dir

注意:正在被进程访问到的挂载点无法被卸载;

查看被哪个或哪些进程所战用:

  • lsof MOUNT_POINT
  • fuser -v MOUNT_POINT

终止所有正在访问某挂载点的进程:

  • fuser -km MOUNT_POINT(目录)

交换分区的启用和禁用:

创建交换分区的命令:mkswap

启用:swapon

  • swapon [OPTION] [DEVICE]
  • -a:定义在/etc/fstab文件中的所有swap设备;

禁用:swapoff

  • swapoff DEVICE

设定除根文件系统以外的其它文件系统能够开机时自动挂载:/etc/fstab文件

每行定义一个要挂载的文件系统及相关属性:

6个字段:

(1) 要挂载的设备:

  • 设备文件;
  • LABEL
  • UUID
  • 伪文件系统:如sysfs, proc, tmpfs等

(2) 挂载点

swap类型的设备的挂载点为swap

(3) 文件系统类型;

(4) 挂载选项

  • defaults:使用默认挂载选项;
  • 如果要同时指明多个挂载选项,彼此间以事情分隔;
  • defaults,acl,noatime,noexec

(5) 转储频率

  • 0:从不备份;
  • 1:每天备份;
  • 2:每隔一天备份;

(6) 自检次序

  • 0:不自检;
  • 1:首先自检,通常只能是根文件系统可用1;
  • 2:次级自检

mount -a:可自动挂载定义在此文件中的所支持自动挂载的设备;

两个命令:df 和 du

df命令:查看磁盘空间使用信息

df [OPTION]... [FILE]...

  • -l:仅显示本地文件的相关信息;
  • -h:human-readable
  • -i:显示inode的使用状态而非blocks

du命令: 示文件或目录所占用的磁盘空间

du [OPTION]... [FILE]...

  • -s: sumary(求和)
  • -h: human-readable
du -sh tmp/

练习:

1、创建一个10G的分区,并格式化为ext4文件系统;

[root@localhost~]# fdisk /dev/sdb

Device containsneither a valid DOS partition table, nor Sun, SGI or OSF disklabel

Building a new DOSdisklabel with disk identifier 0x6c5ee8d0.

Changes will remainin memory only, until you decide to write them.

After that, ofcourse, the previous content won't be recoverable.

 

Warning: invalidflag 0x0000 of partition table 4 will be corrected by w(rite)

 

WARNING:DOS-compatible mode is deprecated. It's strongly recommended to

         switch off the mode (command 'c') andchange display units to

         sectors (command 'u').

 

Command (m forhelp): n

Command action

   e  extended

   p  primary partition (1-4)

p

Partition number(1-4): 1

First cylinder(1-1318, default 1): 1

Last cylinder,+cylinders or +size{K,M,G} (1-1318, default 1318): +10G

 

Command (m forhelp): w

The partition tablehas been altered!

 

Calling ioctl() tore-read partition table.

Syncing disks.

(1) block大小为2048;预留空间为2%,卷标为MYDATA;

mke2fs -t ext4 -b 2048 -m 2 -L 'MYDATA' /dev/sdb1  

(2) 挂载至/mydata目录,要求挂载时禁止程序自动运行,且不更新文件的访问时间戳;

mkdir -p /data/mydata
mount -o noexec,noatime /dev/sdb1 /data/mydata

(3) 可开机自动挂载;

vim /etc/fstab 添加一下内容

/dev/sdb1  /mnt   ext4  defaults 0 0

 

2、创建一个大小为1G的swap分区,并启动之;

创建

[root@localhost~]# fdisk /dev/sdb

 

WARNING: DOS-compatiblemode is deprecated. It's strongly recommended to

         switch off the mode (command 'c') andchange display units to

         sectors (command 'u').

 

Command (m forhelp): n

Command action

   e  extended

   p  primary partition (1-4)

p

Partition number(1-4): 2

First cylinder(1307-1318, default 1307):

Using default value1307

Last cylinder,+cylinders or +size{K,M,G} (1307-1318, default 1318): +30M

 

Command (m forhelp): t

Partition number(1-4): 2

Hex code (type L tolist codes): 82

Changed system typeof partition 2 to 82 (Linux swap / Solaris) 

 启动

mkswap /dev/sdb2
swapon  /dev/sdb2

 

posted @ 2019-10-06 16:14  Crazymagic  阅读(291)  评论(0编辑  收藏  举报