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

涉及到的命令:

mknod、fdisk、partx、kpartx、partprobe、ln、mkfs、mkfs.{ext2、ext3、ext4、xfs}、fsck.{ext2、ext3、ext4、xfs}、mke2fs、dumpe2fs、tune2fs、e2label、blkid、mkswap、swapon、swapoff、mount、umount、lsof、fuser、df、du、free

=======================理论部分=======================

计算机的三大部件:

CPU、Memory、I/OI/O对服务器来讲主要是指磁盘和网卡

设备类型:

块设备(block),随机访问,数据交换单位为“块”

字符设备(character),线性访问,数据交换单位为“字符”

/dev/设备  设备文件:关联至设备的驱动文件;设备有自己的设备号,分别是主设备号和次设备号

major主设备号,用来区分设备类别(用于表明不同的驱动,不同类型的设备驱动是不同的)

minor此设备号,同一种设备类别下,不同的设备

mknod命令创建设备文件

格式:mknod [OPTION]... NAME TYPE [MAJOR MINOR]

如:mknod  testdev c 100 5

testdev 新建的设备名,c  表示字符设备,100为主版本号,5为次版本号

磁盘设备文件的接口类型:

IDE、SCSI接口、SATA、USB、SAS

IDE接口设备文件名:/dev/hd[a-z]#

SCSI接口、SATA、USB、SAS这些个设备文件名:/dev/sd[a-z]#

a-z  标记设备;#为磁盘分区

track  磁道

sector  每个磁道划分成扇区,512字节/扇区

sylinder  柱面,分区是按照柱面进行划分

MBR(master boot record) 主引导记录表

存在于0磁道0扇区,共512个字节,这512个字节分成三个部分:

446字节:bootloader,程序加载器

64个字节:为分区表,每16个字节表示一个分区,这就是为什么一块硬盘只能有四个主分区

无论怎样组合主分区和扩展分区,第一个逻辑分区一定是/dev/sda5,不同的磁盘或者磁盘类型导致不一定是/dev/sda,但重点是5

2个字节:55AA(16进制),当前MBR信息是否有效的标记

==============================================

fdisk命令:

查看已经识别的磁盘设备

分区标志方式

主分区或扩展分区:1-4

逻辑分区:5+

fdisk /dev/sda (举例),进入到设备分区状态,通过交互式的方式进行

常用命令:

p    显示现有分区表

n    创建新分区

d    删除现有分区

t    修改分区ID

l    查看支持那些分区ID

w    保存退出

q    不保存退出

m    查看帮助信息

fdisk -l /dev/sd[a-z]

查看磁盘分区列表,如果后面不加设备名则列出全部磁盘分区情况

使用fdisk进行分区后,需要查看内核是否已经识别新建分区

cat /proc/partitions

一般来说,一块新添加的硬盘未进行任何分区,在fdisk后,内核一般会自动识别所有分区,但如果是一块在用的硬盘再次划分分区,内核不能自动识别,需要手动添加

通知内核强制读取分区表:

centos  5 :   partprobe /dev/DEVICE

centos 6 :   partx ,kpartx

partx -a /dev/DEVDICE

kpartx -af /dev/DEVICE

partx -l /dev/sda       列出分区

注意: 成功读取分区,可能要执行多次才能识别

============================================

创建分区以后是不能直接存数据的,需要进行格式化指定的文件系统

元数据:每个索引项被称为一个inode(index  node)

"/"  根分区是存在内核中的,开机时就要管理根文件系统(rootfs)

链接文件,分为硬连接和软连接

硬连接:

#cp -l SRC DST

#ln  SRC DST

两种方法都行

目录不支持硬连接

硬连接不能跨文件系统,(源数据和目标数据在同一个分区中)

源数据和目标数据指向同一个inode,创建硬连接会增加inode的引用计数

符号链接(即软连接)

#ln -s  SRC DST

符号链接文件和原文件是两个各自独立的文件

目录可以创建软连接

可以跨文件系统

删除链接文件不影响源文件,但删除源文件,符号链接指向的文件不存在,就成了无效的链接

文件系统管理工具

创建文件系统

mkfs.ext2,mkfs.ext3,mkfs.ext4,mkfs.xfs(centos6中没有,需要安装xfsprogs)

检测文件系统

fsck.ext2,fsck.ext3,fsck.ext4,fsck.xfs

查看其属性

dumpe2fs,tune2fs

日志型文件系统,加速文件系统检测和修复过程,常见的有ext3\ext4\xfs(centos7中默认就是xfs类型)

创建ext系列文件系统,mke2fs

mke2fs [option]...  /dev/DEVICE

option:

-t     ext2/ext3/ext4    指明要创建的文件系统类型

mk2efs -t ext4=mkfs.ext4(以此类推)

-b    block size    {1024|2048|4096}   最大4096,因为内存page frame最大就是4K,不能超过内存的page frame

-L    label,卷标,格式化时修改卷标

-i #    指明inode与字节的比率,即每多少个字节创建一个inode(调整的意义不大,一般都采用默认)

-N #    直接指明给此文件系统创建多少个inode

-m #    指定预留空间的百分比,默认为5(5%的空间留作管理员使用)

-O    [^]FEATURE (特性),指定文件系统的特性,加上^表示取消指定特性

如:has_journal(如果使用-j选项;-j是创建ext2文件系统)不常用

e2label:查看或者修改分区卷标

查看:e2label /dev/DEVICE

设定卷标: e2label /dev/DEVICE  LABEL(不需要格式化,而直接修改卷标)

#blkid   /DEVICE(查看分区卷标信息)

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

查看超级块中的数据信息:

tune2fs -l /dev/DEVICE

修改指定文件系统的属性:

-j     ext2-->ext3   无损数据情况下,ext2升级为ext3

-L LABEL   修改卷标

-m #   调整预留百分比

tune2fs -m 3 /dev/sdb1    由默认的预留的5%修改3%(无损数据)

-O  [^]FEATURE  开启或关闭某种特性

tune2fs  -O  ^has_journal  /dev/sdb1   关闭日志功能(会变成ext2系统类型)

-o    [^]mount_options   开启或关闭某种默认挂载选项

tune2fs -o  acl  /dev/sdb1   支持facl功能

tune2fs -o  ^acl  /dev/adb1   关闭facl功能

dumpe2fs:  (ext系列文件系统)

-h    仅显示超级块信息  结果等于tune2fs -l /dev/DEVDICE

dumpe2fs  /dev/DEVICE  产看完整的信息

文件系统检测:

因进程意外终止,或系统崩溃等原因导致写入操作非正常终止时,可能会导致文件损坏,此时应该修复文件系统

注意:应该离线进行

卸载文件系统,离线进行

fsck

fsck.ext2,fsck.ext3,fsck.ext4

fsck -t TYPE = fsck.TYPE

-a  (auto),自动修复所有错误(有副作用)

-r    交互式提醒修复错误(默认行为)

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

e2fsck

-y     对所有问题自动回答yes

-f    即便文件系统处于clean状态,也要强制进行检测

windows无法识别Linux上的专用文件系统,因此,有存储设备需要两种系统之间交叉使用时,应该使用windows支持的文件系统:

#mkfs -t vfat /dev/DEVICE(不常用)

另外一种特殊的文件系统:

swap交互分区

Linux上的交换分区必须使用独立的磁盘分区

fdisk /dev/DEVICE        t命令调整ID为82   注意调整swap类型

创建交换分区文件系统:

mkswap [-L LABEL] /dev/DEVICE

swapon  /dev/DEVICE 启用

swapoff   /dev/DEVICE  不起用

文件系统挂载

在Linux系统上,所有文件系统必须挂载才能使用

根文件系统:根关联的分区,其余所有的其他文件系统要想被访问,都只能通过关联至跟文件系统上的某个目录

注意:如果一个目录中有文件,然后把一个分区挂载至此目录,原目录中的文件会被隐藏

命令:mount、umount  挂载、卸载

挂载点:mount_point,用于作为另一个文件系统的访问入口

mount  DEVICE MOUNT_POINT

挂载点:

1、事先存在

2、尽量使用空白目录

卸载:

umount DEVICE  或者  umount  MOUNT_POINT

mount

常用挂载选项:

mount:显示当前系统已经挂在的所有文件系统的属性

mount [option]...   [-t fstype] [ -o option] DEVICE  MOUNT_POINT

命令选项:

-r    只读挂载

-w    读写挂载

-t    fsTYPE,被挂在的设备上的文件系统,可省略,此时mount会自动使用blkid命令来判断类型

-L    LABEL    以卷标的方式挂载设备,此时DEVICE需要省略  (上文说道blkid可以查看卷标)

-U    UUID    以UUID的方式挂载设备,此时DEVICE需要省略

-a    自动挂载所有支持自动挂载的设备 (/etc/fstab文件中定义的支持自动挂载的设备)

-n    默认情况下,设备挂载与否的改变结果会保存于/etc/mtab中一份,如果不想更新此文件,可以使用-n选项

/etc/mtab   自动追踪系统已挂在的文件系统

挂载选项

-o    OPTION

async    异步写入(性能好,但数据可靠性差,一般情况下都用异步模式)

sync    同步写入(性能差,但数据可靠性好)

dirtime/nodirtime    目录在访问时是否更新访问时间戳

atime/noatime    文件或目录在被访问时是否更新其访问时间戳

auto/noauto    支持/不支持自动挂载(跟前面的选项-a有关)

dev/nodev    此设备上是否允许创建设备文件

exec/noexec   是否允许执行此文件系统上的程序文件

suid/nosuid    是否支持此设备上的文件使用suid权限

acl/noacl        支持/不支持acl

remount        重新挂载

ro    只读

rw    读写

user/nouser    是否允许普通用户挂载此文件系统

defaults (不写则为defaults)

Use default options: rw, suid, dev, exec, auto, nouser, async, and relatime.

如:mount -o remount,acl  /dev/sdb7      remount,acl用逗号更分割但不用空格隔开

注意:可以使用tune2fs -o acl  DEVICE     来设置DEVICE的默认挂载选项(因为mount挂载时没有指定acl,则不支持acl)

mount命令的另一个使用技巧:

将某目录绑定至指定另外一个目录下

mount  --bind  源目录   目标目录

如:    mount  --bind    /usr/local  /mnt

查看已经挂载设备的方法:

mount

cat  /etc/mtab

cat /proc/mounts

注意:卸载设备时如果有其他进程正在访问,是不能被卸载的

报错提示:

umount: /mnt: device is busy.

(In some cases useful info about processes that use

the device is found by lsof(8) or fuser(1))

可以使用lsof  或者  fuser

[root@www mnt]# lsof /dev/sdb7

COMMAND   PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME

bash    11246 root  cwd    DIR   8,23        6  128 /mnt

lsof    19893 root  cwd    DIR   8,23        6  128 /mnt

lsof    19894 root  cwd    DIR   8,23        6  128 /mnt

[root@www mnt]# fuser -v /mnt

USER        PID ACCESS COMMAND

/mnt:                root      11246 ..c.. bash

如果想强行卸载,杀死访问挂载点进程

fuser -km MOUNT_POINT/DEVICE

然后在进行卸载就OK了

df命令

报告文件系统使用状况信息

-l    仅显示本地文件系统的相关信息

-h    单位划算

-i    显示inode信息,而非磁盘块(默认是磁盘块)

du命令

文件大小查看

-s    summary,统计目录底下所有文件的总大小(目录大小跟目录底下文件的大小是没有关系的)

-h    单位划算

如:

[root@www tmp]# du -sh /*

4.0K/backup

8.4M/bin

34M/boot

204K/dev

......

swap相关

free命令,查看内存使用状况

buffer    缓冲

cache    缓存

swapon  DEVICE    启用指定的交换分区

-a    启用/etc/fstab中所有定义的交换分区

swapoff   DEVICE   关闭指定的交换分区

/etc/fstab

修改配置文件,开机自动挂载

共有6个字段,并用空格分隔开

第一字段:挂载设备  (设备文件名、UUID、LABEL、伪文件系统,如sysfs,proc,tmpfs等)

第二字段:挂载点(swap的挂载点就是 swap)

第三字段:文件系统类型

第四字段类型:挂载选项(defaults,表示使用默认挂载选项,多个挂载选项使用逗号分隔)

第五字段类型:转储频率,即多久备份一次,0表示从不备份,1表示每天没法,2表示隔一天备份一次(一般都为0)

第六字段类型:自检次序,0表示不自检,1表示首先自检(一般只有”/“文件系统可首先自检),2表示次级自检,然后3、4、5.......(一般为0)

#mount  -a    会挂载/etc/fstab中支持自动挂载的设备

======================练习======================

练习

1、创建一个10G分区,并格式为ext4的文件系统,要求block为2048,卷标MYDATA,默认挂载属性包含acl,挂载至/data/mydata,挂载时禁止程序自动运行,且不更新文件的访问时间戳

使用/dev/sdb做实验

#fdisk /dev/sdb#创建分区

n新建

p选择类型,主分区

1分区编号

1起始柱面

+10G大小指定为10G

w保存退出

#partx -a /dev/sdb#让内核识别新分区,执行两次

# mkfs -t ext4 -b 2048 -L MYDATA /dev/sdb1

[root@localhost ~]# tune2fs -o acl /dev/sdb1

[root@localhost ~]# tune2fs -l /dev/sdb1

tune2fs 1.41.12 (17-May-2010)

Filesystem volume name:   MYDATA

Last mounted on:          <not available>

Filesystem UUID:          6e85fb3a-16fe-4123-9905-210a9264bc32

Filesystem magic number:  0xEF53

Filesystem revision #:    1 (dynamic)

Filesystem features:      has_journal ext_attr resize_inode dir_index filetype extent flex_bg sparse_super huge_file uninit_bg dir_nlink extra_isize

Filesystem flags:         signed_directory_hash

Default mount options:    acl

Filesystem state:         clean

Errors behavior:          Continue

Filesystem OS type:       Linux

Inode count:              657408

Block count:              5245206

Reserved block count:     262260

Free blocks:              5123382

Free inodes:              657397

First block:              0

Block size:               2048

Fragment size:            2048

...

[root@localhost ~]# blkid /dev/sdb1

/dev/sdb1: LABEL="MYDATA" UUID="6e85fb3a-16fe-4123-9905-210a9264bc32" TYPE="ext4"

[root@localhost ~]# mount -t ext4 -o noexec,noatime /dev/sdb1 /data/mydata/

[root@localhost ~]# mount

/dev/sda2 on / type ext4 (rw)

proc on /proc type proc (rw)

sysfs on /sys type sysfs (rw)

devpts on /dev/pts type devpts (rw,gid=5,mode=620)

tmpfs on /dev/shm type tmpfs (rw)

/dev/sda1 on /boot type ext4 (rw)

/dev/sda3 on /usr type ext4 (rw)

none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw)

/dev/sdb1 on /data/mydata type ext4 (rw,noexec,noatime)

2、创建一个大小为1G的交换分区,并创建好文件系统,并启用

创建分区:

#fdisk /dev/sdb

n   #新建

p   #选择类型,主分区

2   #分区编号

#直接回车表示起始柱面从默认开始

+2G #指定大小为2G

t   #切换分区

2#选择分区2

82  #更换类型为82(Linux swap)

w   #保存退出

添加到内核

#partx -a /dev/sdb  #添加到内核,一次如果不行,可以多执行一次

制作成swap类型

[root@localhost ~]# mkswap /dev/sdb2

mkswap: /dev/sdb2: warning: don't erase bootbits sectors

(dos partition table detected). Use -f to force.

Setting up swapspace version 1, size = 2104508 KiB

no label, UUID=721c7796-82c8-400a-8532-1db69114859b

[root@localhost ~]# free -m

total       used       free     shared    buffers     cached

Mem:           988        146        841          0         14         52

-/+ buffers/cache:         79        908

Swap:            0          0          0

启用swap并验证

[root@localhost ~]# swapon /dev/sdb2

[root@localhost ~]# free -m

total       used       free     shared    buffers     cached

Mem:           988        148        840          0         14         52

-/+ buffers/cache:         81        907

Swap:         2055          0       2055

3、练习:(脚本实现)

A、获取并列出当前系统上的所有磁盘设备

B、显示每个磁盘设备上每个分区相关空间的使用情况

#!/bin/bash

for i in $(grep '.*[^0-9]$' /proc/partitions |grep -v 'major'|tr -s ' ' |cut -d' '  -f5);do

echo "============$i============"

fdisk -l /dev/$i

df -h /dev/$i

echo

done

[root@localhost scripts]# bash 6.sh

============sdb============

Disk /dev/sdb: 42.9 GB, 42949672960 bytes

255 heads, 63 sectors/track, 5221 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: 0xcea36bcf

Device Boot      Start         End      Blocks   Id  System

/dev/sdb1               1        1306    10490413+  83  Linux

/dev/sdb2            1307        1568     2104515   82  Linux swap / Solaris

Filesystem      Size  Used Avail Use% Mounted on

-               480M  212K  480M   1% /dev

============sda============

Disk /dev/sda: 85.9 GB, 85899345920 bytes

255 heads, 63 sectors/track, 10443 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: 0x0000e0a8

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        2637    20971520   83  Linux

/dev/sda3            2637        5248    20971520   83  Linux

/dev/sda4            5248       10444    41737216    5  Extended

/dev/sda5            5248        6553    10488077   fd  Linux raid autodetect

/dev/sda6            6554        7859    10490413+  fd  Linux raid autodetect

/dev/sda7            7860        8198     2722986   fd  Linux raid autodetect

/dev/sda8            8199        8537     2722986   fd  Linux raid autodetect

Filesystem      Size  Used Avail Use% Mounted on

-               480M  212K  480M   1% /dev

转载于:https://blog.51cto.com/wangkunpeng/1708695

磁盘管理及文件系统管理相关推荐

  1. 20150901-Linux磁盘管理及文件系统管理

    占位,待完善... Linux系统管理 磁盘和文件系统管理: RAID, LVM; btrfs; 程序包管理:rpm, yum(dnf) Linux的网络管理; 进程和作业管理:htop, glanc ...

  2. Centos磁盘管理和文件系统管理

    Linux磁盘及文件系统管理 文件接口:open(), read(), write(), close() 设备类别: 块(block):随机访问,数据交换单位为"块" 字符(cha ...

  3. 磁盘管理以及文件系统管理

    Linux 里面的磁盘命名格式 /dev/sda sd 表示一种串口设备 sata usb scsi sas /dev/hda hd 表示一种并口设备 ide 串并口是输入.输出接线插座的俗称,它位于 ...

  4. 【CentOS Linux 7】实验3【用户组群管理、磁盘分区及文件系统管理】

    Linux系统及应用---调研报告 [CentOS Linux 7]实验1[VMware安装.新建虚拟机:63个基础命令运行结果图] [CentOS Linux 7]实验2[Shell编程及应用] [ ...

  5. linux文件系统使用和管理,Linux磁盘使用及文件系统管理

    Linux磁盘使用及文件系统管理 新建 欢迎来到 来到大浪涛天的博客 ! 一.Linux磁盘使用及文件系统管理 1.mount 命令 mount [-fnrsvw] [-t vfstype] [-o ...

  6. CentOS 7磁盘分区及文件系统管理

    一.CentOS 7磁盘及文件系统特性 在CentOS 7,不管是IDE硬盘还是SATA硬盘,在linux里面的硬盘设备文件标识都为/dev/sd[a-z].(当然这一特性在CentOS 6中就已经实 ...

  7. Linux磁盘分区及文件系统管理之基础概念

    设备文件 关联至设备的驱动程序,是设备的访问入口 设备号 Major 主设备号,区分设备类型,用于标明设备所需要的驱动程序 Minor 次设备号,区分同种类型下的不同设备 创建设备文件 mknod 每 ...

  8. 磁盘分区和文件系统管理

    在linux系统中,如果需要在某个磁盘上存储数据.需按照以下流程: 将磁盘进行分区 创建文件系统 将文件系统挂载到目录下 在安装linux系统后需要添加更多的交换空间,可以通过添加一个交换分区或添加一 ...

  9. 磁盘分区以及文件系统管理练习题

    1.描述GPT是什么,应该怎么使用. 在说GPT分区之前,先说一下MBR分区. MBR分区是一种传统的分区机制,它适用于X86架构的32位和64位操作系统,位于磁盘的0号扇区(1扇区等于512字节). ...

最新文章

  1. linux user32.lib,USER32!__ClientLoadLibrary定位
  2. 鸿蒙电视哔哩哔哩,[4K视频] 65寸智能电视只要3299元?荣耀智慧屏X1开箱
  3. NET中验证控件表达式汇总
  4. 从0到1,一步步开发React的loading组件,并发布到npm上
  5. (0019)iOS 开发之关于__weak修饰NSString以及内存管理的问题
  6. python中torch模块下载,Python qtorch包_程序模块 - PyPI - Python中文网
  7. springboot使用restTemplate post提交值 restTemplate post值
  8. 做了个专为“数据分析师”打造的刷题平台!
  9. iNeuOS 工业互联网操作系统,在核工业测控领域的成功应用
  10. 按图索骥:SQL中数据倾斜问题的处理思路与方法
  11. JavaScript-传值(引用类型,基本类型)
  12. 5.27 indeed 第三次网测
  13. Laravel 5.4 首次搭建,从 clone 到运行成功
  14. 下载《阿里巴巴Java开发手册(详尽版)1.4.0》 与 码出高效,码出质量
  15. 第六届苏州·张家港全球创新创业大赛等你来赛!
  16. MATLAB求单位阶跃响应,并分析参量的影响。自控例题。
  17. 【学习笔记】kaggle案例之泰坦尼克号(基于R)
  18. Robotics: Aerial Robotics(空中机器人)笔记(四):无人机动力学建模
  19. 马士兵网络安全大师班
  20. 使用bootstrap来模拟构建Cropper的官方网站

热门文章

  1. 陈天奇:深度学习编译技术的现状和未来
  2. 业界丨2018,人工智能革命走向风口浪尖
  3. python如何定义一个简单的栈
  4. 数据挖掘关联规则挖掘FPtree的思想
  5. Gartner 2022年新兴技术和趋势影响力雷达图中五项具有影响力的技术
  6. 刚刚,2021年诺贝尔生理学或医学奖揭晓!
  7. 国产首款脑机编解码集成芯片发布
  8. 【南科大发言】人类赋予人工智能伦理,生物进化方向的突破是关键
  9. 产业|MIR睿工业:2018年机器人市场分析报告
  10. DeepMind推出「控制套件」:为「强化学习智能体」提供性能基准