关于 磁盘、文件系统管理

               磁盘、文件系统管理
              

1  设备识别
2  设备分区
3  创建文件系统
4  标记文件系统
5  在/etc/fstab文件中创建条目

挂载新的文件系统
7  为什么是分区?
8  优化I/O性能
9  实现磁盘空间配额限制
10 提高修复速度
11
隔离系统和程序
12 安装多个OS
13 采用不同文件系统

两种分区方式MBR和GPT
MBR: Master Boot
Record,1982年,使用32位表示扇区数,分区不超过2T
如何分区:按柱面
0磁道0扇区:512bytes
446bytes: boot
loader
64bytes:分区表
16bytes: 标识一个分区
2bytes:
55AA
4个主分区;3主分区+1扩展(N个逻辑分区)
GPT:GUID(Globals Unique Identifiers)partition
table
支持128个分区,使用64位,支持8Z(512Byte/block )64Z (4096Byte/block)

使用128位UUID 表示磁盘和分区GPT分区表自动备份在头和尾两份,并有CRC校验位

UEFI (统一扩展固件接口)硬件支持GPT,使操作系统启动
              
列出块设备:
          
lsblk
           ls /dev/sd*
           cat /proc/partitions

创建分区使用:
fdisk创建MBR分区,也支持GPT,对于一块硬盘,最多只能管理15分区
gdisk创建GPT分区, 跟fdisk
差不多
GNU parted高级分区操作(创建、复制、调整大小等等)
        

查看磁盘分区情况:
[root@Compro ~]# fdisk -l /dev/sda  
[root@Compro ~]# fdisk
/dev/sdb
gfisk /dev/sdb 类fdisk 的GPT分区工具
fdisk -l [-u]
[device…]
子命令:
      p 分区列表
      t 更改分区类型
      n 创建新分区
     
d 删除分区
      w 保存并退出
      q 不保存并退出
     
     

扫描磁盘
新添加硬盘加载到当前系统:
~]# echo  "- – -">
/sys/class/scsi_host/host2/scan
查看块设备:
~]# lsblk 
查看mbr:
~]#
hexdump -C -n 512 /dev/sda  查看磁盘二进制字节
备份mbr :         
[root@Compro ~]#
dd if=/dev/sda of=/testdir/mbrbak bs=1 count=512
                  if读取文件路径
of 输出文件路径到哪个地方
记录了512+0 的读入
记录了512+0 的写出
512字节(512 B)已复制,0.0104854
秒,48.8 kB/秒

查看是否成功:
[root@Compro ~]# hexdump -C -v /testdir/mbrbak

 

通知内核重新读取硬盘分区表
新增分区用:
partx -a /dev/sdb
kpartx -a /dev/sdb -f:
force

删除分区用:
centOS6: -n  –nr <n:m> 指定分区范围(例如:–nr 2:4)
partx -d
/dev/sdb
CentOS7: 使用partprobe
~]# partprobe /dev/sdb

parted的操作都是实时生效,小心使用
用法:parted [选项]… [设备[命令[参数]…]…]
parted
/dev/sdbmklabelgpt|msdos          [root@Compro ~]# parted /dev/sdb mklabel gpt  
更改磁盘标签类型
parted /dev/sdbprint
parted /dev/sdbmkpartprimary 1 200
(默认M)
parted /dev/sdbrm1            [root@Compro ~]# parted /dev/sdb rm 1   
删除1分区
parted -l /dev/sdbrm1         在所有块设备列表分区布局

 

文件系统分类:
常用的linux文件系统:ext2,ext3,ext4,xfs,btrfs,reiserfs,jfs,swap
交换文件系统:swap
网络文件系统:nfs
, smbfs
集群文件系统:GFS ,
OCFS
分布式文件系统:ceph,moosefs,mogilefs,glusterfs,lunster
未经处理或者未经格式化产生的文件系统:
RAW
光盘文件系统:isso96600

根据其是否支持日志功能还可分为:
 日志型文件系统:ext3,etx4,xfs
 非日至类型文件系统:ext2,vfat
 
 文件系统的组成部分:
 
内核中的模块:ext4,xfs,vfat
  用户空间的管理工具:mkfs.ext4 , mkfs.xfs , mkfs.vfat
 
linux的虚拟文件系统:VFS
  查看当前支持的文件系统: cat/proc/filesystems

创建文件系统
mkfs命令   # mkfs. 类型 /dev/sda
用法:
     mkfs [选项] [-t
<类型>] [文件系统选项] <设备> [<大小>]
                  
ext4
                   xfs
                   btrfs
                  
vfat
                   选项:
 -t, –type=<类型>  文件系统类型;若不指定,将使用
ext2
     fs-options     实际文件系统构建程序的参数
     <设备>        
要使用设备的路径
     <大小>         要使用设备上的块数
[root@Compro ~]# mkfs -t ext4
/dev/sdb1
[root@Compro ~]# mkfs -L 类型 /dev/sdb1    设定卷标
              

mke2fs ext系列文件系统专用 管理工具
[root@Compro ~]# mke2fs -t ext2 /dev/sdb1 
{ext|2|ext3|ext4}
[root@Compro ~]# mke2fs -b 1024 /dev/sdb1 
{1024|2048|4096}      指定块大小
[root@Compro ~]# mke2fs -L /mnt/sdb1 /dev/sdb
设定卷标类型 一般设定挂载点为卷标名
[root@Compro ~]# mke2fs -j /dev/sdb1     相当于 -t ext3 

[root@Compro ~]# mke2fs -i # /dev/sdb1  
#为数字;为数据空间中每多少个字节创建一个inode;此大小不应该小于block的大小
[root@Compro ~]# mke2fs -N #
/dev/sdb1   #为数字;为数据空间创建个多少个inode节点表
[root@Compro ~]# mke2fs -I 128
/dev/sdb   修改inode记录大小128—4096 
[root@Compro ~]# mke2fs -m # /dev/sdb1  
#为数字; 默认5%,为管理人员预留空间占总空间的百分比
[root@Compro ~]# mke2fs -O has_journal
/dev/sdb1    启用指定特性   启用日志功能,也可以启动别的特性
[root@Compro ~]# mke2fs -O
^has_journal /dev/sdb1   关闭指定特性   关闭了日志功能 ,也可以关闭其它特性

 
指向设备的另一种方法;与设备无关
[root@Compro ~]# blkid       块设备属性信息查看  

[root@Compro ~]# blkid [选项]… [设备]
[root@Compro ~]# blkid -U UUID:
根据指定的UUID来查找对应的设备
[root@Compro ~]# blkid -L ext3  根据指定的标签来查找对应的设备

[root@Compro ~]# e2label /dev/sdb1 ext2 :管理ext系列文件系统的标签 
            格式
e2label DEVICE [LABEL]

tune2fs:重新设定ext系列文件系统可调整参数的值
[root@Compro ~]# tune2fs -l /dev/sdb1  
查看指定文件系统超级块信息;super block
[root@Compro ~]# tune2fs -l /dev/sdb1  
修改卷标
[root@Compro ~]# tune2fs -m # /dev/sdb1 
#为数字;修改预留给管理员的空间百分比
[root@Compro ~]# tune2fs -j /dev/sdb1  
将ext2升级为ext3
[root@Compro ~]# tune2fs -O has_journal /dev/sdb1 文件系统属性启用或禁用
启用日志功能,也可以启动别的特性  
[root@Compro ~]# tune2fs -O ^has_journal /dev/sdb1  
关闭指定特性   关闭了日志功能 ,也可以关闭其它特性
[root@Compro ~]# tune2fs -o acl /dev/sdv1  
调整文件系统的默认挂载选项
[root@Compro ~]# tune2fs -o ^acl /dev/sdv1     

[root@Compro ~]# tune2fs -U UUID    修改UUID号
[root@Compro ~]#
uuidgen            随机生成UUID
[root@Compro ~]# dumpe2fs -h /dev/sdb1
查看超级块信息(分组信息),分区用分组管理  同tune2fs -l 一样

常发生于死机或者非正常关机之后
挂载为文件系统标记为“dirty”
fsck: File System Check 
文件系统校验
[root@Compro ~]# fsck.文件类型
[root@Compro ~]# fsck
/dev/sdb1
[root@Compro ~]# fsck -y /dev/sdb1   自动回答为yes
[root@Compro ~]#
fsck -t 文件类型
[root@Compro ~]# fsck -a /dev/sdb1自动修复错误
[root@Compro ~]#
fsck -r /dev/sdb1 交互式修复错误
注意:
文件类型一定要与分区上已经文件类型相同;
e2fsck:ext系列文件专用的检测修复工具
-y:自动回答为yes
-f:强制修复 

文件系统的挂载
挂载mount
挂载:将额外文件系统于根文件系统某现存的目录建立起关联关系,
     
进而使得此目录作为其他文件访问入口的行为
卸载:解除此关联关系的过程
把设备关联挂载点:mount
Point
卸载时:可使用设备,也可以使用挂载点 umount
挂载点下原有文件在挂载完成后会被临时隐藏
挂载点目录一般为空

挂载工具mount的使用
mount 设备
安装指向
设备:所奥挂载的磁盘分区
安装指向挂载点:另一个文件系统的访问入口
mount
通过查看/etc/mtab文件显示当前已经挂载的所有设备
固定挂载点:/mnt,/media
mount [选项]…[-t 文件类型] [-o
选项]设备 挂载点
挂载点需要具备以下两点:1事先存在 2使用空闲目录
进程正在使用中的设备无法被卸载
[root@Compro ~]#
mount /dev/sdb1 /testdir/     将磁盘挂载到testdir目录下
常用挂载选项:
      -t
指定文件系统类型
      -r 只读挂载
      -w 读写挂载
      -L 以卷标方式指定设备,
      -U
以UUID的方式指定设备,例如 mount -U UUID 挂载点
      -a
自动挂载所有(/etc/fstab文件中定义的)的支持自动挂载设备
      -n 挂载时,不更新/etc/mtab文件
      -B
绑定目录到另一个目录上
      cat /proc/mounts  查看内核追踪到的已经挂载的所有设备
伪文件系统名称:proc, sysfs,
devtmpfs, configfs

        -o 选项:(挂载文件系统的选项)
        async:异步模式
       
sync:同步模式,内存更改时,同时写磁盘
        atime/noatime:包含目录和文件
       
diratime/nodiratime:目录的访问时间戳
        auto/noauto:是否支持自动挂载,是否支持-a选项
       
exec/noexec:是否支持将文件系统上运行应用程序
        dev/nodev:是否支持在此文件系统上使用设备文件
       
suid/nosuid:不否支持suid和sgid权限
        remount:重新挂载
        ro:只读
       
rw:读写
        user/nouser:是否允许普通用户挂载此设备,默认管理员才能挂载
       
acl:启用此文件系统上的acl功能
注意:上述选项可多个同时使用,彼此之间使用逗号分隔
      默认挂载选项:rw, suid, dev,
exec, auto, nouser, async

查看挂载情况:
[root@Compro ~]# findmnt /dev/sda1

查看正在访问指定文件系统的进程:
[root@Compro ~]# lsof /dev
[root@Compro ~]# fuser -v
/dev/
终止所有在正访问指定的文件系统的进程:
[root@Compro ~]# fuser -km /dev/   
善用此命令
卸载:
umount 设备
umount 指明安装路径

 

设备自动挂载
配置文件系统:/etc/fstab
被mount、fsck和其它程序使用
系统重启是保留文件系统卷标
可以在设备栏使用文件系统卷标
使用mount
-a 命令挂载/etc/fstab中的所有文件系统

/etc/fstab每行定义一个要挂载的文件系统;
要挂载的设备或伪文件系统
挂载点
文件系统类型
挂载选项
转储频率
自检次序
要挂载的设备或伪文件系统:
设备文件、LABEL(LABEL="")、UUID(UUID="")、伪文件系统名称(proc,
sysfs)
挂载选项:defaults
转储频率:
         0:不做备份
        
1:每天转储
         2:每隔一天转储
自检次序:
         0:不自检
        
1:首先自检;一般只有rootfs才用1

处理交换文件和分区
交换分区是系统RAM的补充
基本设置包括:
创建交换分区或者文件
使用mkswap写入特殊签名
在/etc/fstab文件中添加适当的条目
使用swapon
-a 激活交换空间

挂载交换分区
启用:swapon
swapon [OPTION]… [DEVICE]
        
-a:激活所有的交换分区;
         -p
PRIORITY:指定优先级
/etc/fstab:pri=value
禁用:swapoff [OPTION]… [DEVICE]

SWAP的优先级
用户可以给某个swap指定一个0到32767的优先级
如果用户没有指定,那么核心会自动给swap指定一个优
先级,这个优先级从-1开始,每加入一个新的没有用户
指定优先级的swap,会给这个优先级减一。
先添加的swap的缺省优先级比较高,除非用户自己指定
一个优先级,而用户指定的优先级(是正数)永远高于核心
缺省指定的优先级(是负数)。
优化性能:分布存放,高性能磁盘存放

移动介质
挂载意味着使外来的文件系统看起来如同是主目录树的一部分
访问前、介质必须被挂载
摘除时,介质必须被卸载
按照默认设置,非根用户只能挂载某些设备(光盘、DVD、软
盘、USB等等)
挂载点通常在/media
或/mnt下

使用光盘
在图形环境下自动启动挂载/run/media/<user>/<label>
否则就必须被手工挂载
mount
/dev/cdrom/mnt/
eject命令卸载或弹出磁盘
创建ISO文件
cp/dev/cdrom/root/centos7.iso
mkisofs
-r -o /root/etc.iso /etc
刻录光盘
wodim–v –eject centos.iso

挂载USB介质
被内核探测为SCSI设备
/dev/sdaX、/dev/sdbX、或类似的设备文件
手动挂载
mount
/dev/sdb1 /mnt

常见工具
内存空间使用状态:
                free [OPTION]
                      
-m: 以MB为单位
                       -g:
以GB为单位
文件系统空间占用等信息的查看工具:
            df [OPTION]…
[FILE]…
               -H 以1000为单位
             -T
文件系统类型
                -h: human-readable
                      
-i:inodesinstead of blocks
                       -P:
以Posix兼容的格式输出
查看某目录总体空间占用状态:
          du [OPTION]… DIR
            
-h: human-readable
              -s: summary
工具dd
dd命令:convert and copy
a file
用法:
     ddif=/PATH/FROM/SRC of=/PATH/TO/DEST
       bs=#:block
size, 复制单元大小
    count=#:复制多少个bs
       of=file写到所命名的文件而不是到标准输出
      
if=file从所命名文件读取而不是从标准输入
       bs=size指定块大小(既是是ibs也是obs)
     
ibs=size一次读size个byte
      obs=size 一次写size个byte
      cbs=size
一次转化size个byte
     skip=blocks从开头忽略blocks个ibs大小的块
    
seek=blocks从开头忽略blocks个obs大小的块
    count=n只拷贝n个记录
    
conv=conversion[,conversion…] 用指定的参数转换文件。
转换参数:
        ascii 转换EBCDIC
为ASCII
        ebcdic 转换ASCII 为EBCDIC
        block 转换为长度为cbs
的记录,不足部分用空格填充。
        unblock 替代cbs长度的每一行尾的空格为新行
        lcase
把大写字符转换为小写字符
        ucase 把小写字符转换为大写字符
        swab 交换输入的每对字节
       
noerror 出错时不停止
        notrunc 不截短输出文件
        sync
把每个输入块填充到ibs个字节,不足部分用空(NUL)字符补齐
磁盘拷贝:
        
ddif=/dev/sdaof=/dev/sdb
备份MBR:
        ddif=/dev/sdaof=/tmp/mbr.bakbs=512
count=1
破坏MBR中的bootloader:
        ddif=/dev/zero of=/dev/sdabs=64 count=1
seek=446
      
有一个大与2K的二进制文件fileA。现在想从第64个字节位置开始读取,需要读取的大小是128Byts

又有fileB,
想把上面读取到的128Bytes写到第32个字节开始的位置,替换128Bytes,请问如何实现?
 #ddif=fileAof=fileBbs=1
count=128 skip=63 seek=31 conv=notrunc

备份:
    dd if=/dev/sdx of=/dev/sdy
   
将本地的/dev/sdx整盘备份到/dev/sdy
    dd if=/dev/sdx of=/path/to/image
   
将/dev/sdx全盘数据备份到指定路径的image文件
    dd if=/dev/sdx | gzip
>/path/to/image.gz
    备份/dev/sdx全盘数据,并利用gzip工具进行压缩,保存到指定路径
恢复:
   
dd if=/path/to/image of=/dev/sdx
    将备份文件恢复到指定盘
    gzip -dc
/path/to/image.gz | dd of=/dev/sdx
    将压缩的备份文件恢复到指定盘

 

拷贝内存资料到硬盘
      dd if=/dev/mem of=/root/mem.bin bs=1024 
     
将内存里的数据拷贝到root目录下的mem.bin文件
从光盘拷贝iso镜像
      dd if=/dev/cdrom
of=/root/cd.iso
      拷贝光盘数据到root文件夹下,并保存为cd.iso文件
销毁磁盘数据
      dd
if=/dev/urandom of=/dev/sda1
      利用随机的数据填充硬盘,在某些必要的场合可以用来销毁数据。
     
执行此操作以后,/dev/sda1将无法挂载,创建和拷贝操作无法执行。

得到最恰当的block size
    dd if=/dev/zero bs=1024 count=1000000
of=/root/1Gb.file
    dd if=/dev/zero bs=2048 count=500000
of=/root/1Gb.file
    dd if=/dev/zero bs=4096 count=250000
of=/root/1Gb.file
    dd if=/dev/zero bs=8192 count=125000
of=/root/1Gb.file
通过比较dd指令输出中所显示的命令执行时间,即可确定系统最佳的block size大小

测试硬盘读写速度
    dd if=/root/1Gb.file bs=64k | dd of=/dev/null
    dd
if=/dev/zero of=/root/1Gb.file bs=1024
count=1000000
通过上两个命令输出的执行时间,可以计算出测试硬盘的读/写速度

 

修复硬盘
        dd if=/dev/sda of=/dev/sda
       
当硬盘较长时间(比如1,2年)放置不使用后,磁盘上会产生消磁点。
       
当磁头读到这些区域时会遇到困难,并可能导致I/O错误。当这种情况影响到硬盘的第一个扇区时,
       
可能导致硬盘报废。上边的命令有可能使这些数据起死回生。且这个过程是安全,高效的。

 

 

原创文章,作者:小马哥,如若转载,请注明出处:http://www.178linux.com/41838

(0)
上一篇 2016-08-30 13:55
下一篇 2016-08-30 13:55

相关推荐

  • yum相关知识及源码编译安装http

    二.源码编译安装http 获得源码,将源码放在/usr/local/src下,并将其解压缩到此目录下 进入解压缩文件下,查看INSTALL文件 文件内容如下 黄色区域即为安装步骤 在当前目录下执行./configure –prefix=/usr/local/appach2 编译  make make install  把目标文…

    系统运维 2016-08-24
  • Linux系统启动流程

        下面按照系统的启动顺序来进行逐一的讲解。 一、POST     当我们按下开机的电源后,主板上的芯片组会首先向CPU发出一个reset指令,之后待芯片组检测到电源供电稳定后便撤去reset指令,CPU就会跳转到BIOS中的启动代码位置; BIOS首先要检测关键设备(如内显…

    Linux干货 2015-05-23
  • Bash的&&,||逻辑运算

    Bash的&&,||逻辑运算 bash里的true和false并不是我们通常所认为的0和1。 true和false是shell的内置命令,返回逻辑值。 $?是一个特殊的变量,存放有上一个程序的结束状态。 在shell里面,把0作为程序是否成功结束的标志。 例如: $ true$ echo$?0$ false$ echo$?1 有时候,下一条命…

    Linux干货 2016-04-11
  • 谁说C语言很简单?

    前两天,Neo写了一篇《语言的歧义》其使用C语言讨论了一些语言的歧义。大家应该也顺便了解了一下C语言中的很多不可思异的东西,可能也是你从未注意到的东西。 是的,C语言并不简单,让我们来看看下面这些示例: 为什么下面的代码会返回0?(这题应该很简单吧) int x;   return x == (1&…

    Linux干货 2016-03-20
  • Linux学习之数据重定向

    大纲: 一、数据重定向定义 二、数据重定向分类 三、数据重定向作用 四、示例 一、数据重定向:命令的运行的结果默认输出在监视器上,重定向就是把这个结果输出到其它地方或其它文件。 二、数据重定向分类: 1.标准输出: (standard output,简称stdout,代码为 1 ,使用 > 或 >>):命令执行成功输出的正确提示信…

    Linux干货 2015-06-24
  • 加密和解密技术基础(01) ~ 105分钟

    加密和解密技术基础(01) ~ 105分钟 讲课思路: 互联网通信机制 –> 网络协议模式(osi,tcp/ip模型) –> 数据通信安全  à 数据加密 –> 加密算法 –> OpenSSL是什么 à SSL通信原理 –> CA –> OpenSSL命令用法 à CA 自签及签证演示 1.1 &nbs…

    Linux干货 2016-09-19

评论列表(1条)

  • 马哥教育
    马哥教育 2016-09-01 14:46

    写的过于随意,没有自己的思路,同时对于一些专业的术语,能给出图片来展示。也希望作者能多些操作。