磁盘及文件系统管理详解

磁盘管理:

机械式硬盘:
  U盘,光盘,软盘,硬件,磁带
 
低级格式化
partition
  分区创建文件系统
MBR:主引导记录(0盘面0磁道0扇区512byte,属于磁盘的,独立于操作系统之外)
    Master Boot Record
    Main Boot Record
      446byte:BootLoader,程序,引导加载器
      64bytes:
        16:表示一个分区,只能有4个主分区
      2bytes:Magic Number
        标记MBR是否有效
        
主+扩展<=4

平均寻道时间(磁头转到磁道,数据转到磁头)
iops:每秒钟磁盘所能完成的读写
7200RPM

C盘:位于磁盘最外磁道

分区上存储文件:
文件系统的数据放在分区上,
元数据(Metadata)+数据存储区(1...n块)

块位图:bitmap 每块对应位图的一位

inode:index node 索引结点
  存放inode号码,对应文件权限,属主属组,大小,时间戳,文件块信息

  /var/log/message
  找到根/,根据跟找到对应的文件块,文件快中有一张表
    根据目录找到文件名var和var的idnode。
  根据idnode找到条目的磁盘块var,找到log
 
ln (-s,-v) SRC DEST
mkdir /backup
cd /backup/
cp /etc/rc.d/rc.sysinit ./abc
mkdir test
ln abc test/abc2
ls -l
cd test
ls -l

ls -i test/
rm abc
ls test/    abc2

创建软连接
ln -sv /backup/abc /backup/test/abc2
ls -i test/
ls -il test/

硬链接:

    1、只能对文件创建,不能应用于目录;
    2、不能跨文件系统;
    3、创建硬链接会增加文件被链接的次数;
    
符号链接:
    1、可应用于目录;
    2、可以跨文件系统;
    3、不会增加被链接文件的链接次数;
    4、其大小为指定的路径所包含的字符个数;
du
    -s
    -h

df

磁盘及文件系统管理详解

磁盘及文件系统管理详解

磁盘及文件系统管理详解

设备文件:
    b: 按块为单位,随机访问的设备;
    c:按字符为单位,线性设备;
    
    b: 硬盘
    c: 键盘
    
/dev
    主设备号 (major number)
        标识设备类型
    次设备号 (minor number)

        标识同一种类型中不同设备

mknod
mknod [OPTION]... NAME TYPE [MAJOR MINOR]
    -m MODE

mknod mydev c 66 0
ls -l
mknod -m 640 mydev2 c 66 1
ls -l
硬盘设备的设备文件名:
IDE, ATA:hd
SATA:sd
SCSI: sd
USB: sd
    a,b,c,...来区别同一种类型下的不同设备
    
IDE:
    第一个IDE口:主、从
        /dev/hda, /dev/hdb
    第二个IDE口:主、从
        /dev/hdc, /dev/hdd

sda, sdb, sdc, ...

hda:
    hda1: 第一个主分区
    hda2:
    hda3:
    hda4:
    hda5: 第一个逻辑分区
    
查看当前系统识别了几块硬盘:

fdisk -l [/dev/to/some_device_file]

格式化:低级格式化(创建磁道)
       高级格式化:mkfs

VFS:Virtual File System

windows:
  FAT32
  NTFS
  光盘存储格式:ISO9600
  CIFS
  ext,xfs,reiserfs,jfs,nfs,ocfs2,gfs2


管理磁盘分区:
fdisk /dev/sda
    p: 显示当前硬件的分区,包括没保存的改动
    n: 创建新分区
        e: 扩展分区
        p: 主分区
    d: 删除一个分区
    w: 保存退出
    q: 不保存退出
    t: 修改分区类型
        L:
    l: 显示所支持的所有类型

partprobe

硬件->内核(内核空间)->应用程序(进程)
用户模式:用户空间
interface:system call 系统调用,完成与硬件交互

编写的程序在cpu运行
intel,amd cpu
有4个环 ring0(内核运行在其上) ring1 ring2没使用(历史原因)
ring3(用户进程运行其上)
内核运行在内核空间

一个磁盘块可以属于多个文件
a,b内容不一样,不能将其存放在同一块中
一个磁盘块属于一个内容,有多个路径
一个文件有多个路径,路径就是硬链接

inode:index node   inode bitmap/block bitmap
block size:1024,2048,4096
super block :保存多少个块组,每个块组有多少块,大小,已用空闲
块组描述符表:多少块组,每个块组从何开始结束

Boot Block   Block Group 0   Block Group 1  .....  Bolck Group n
              Super Block
              GDT:Group Discribtion Table
              Block Bitmap
              inode Bitmap
              inode Table
              Data Blocks
Boot Block:任何分区的第一个块,存放操作系统的Boot Loader,被MBR使用
MBR:不属于任何分区

/var/log/message
/ var文件
inode  rec_len   name_len   file_type   name

inode格式
Mode
Owner info
Size
Timostamps
Direct Blocks
Indirect blocks
Double Indirect
Triplc Indirect

ext3 <- ext2
ext3:journal file system 日志文件系统
元数据区,数据区,日志区
inode->日志区->存数据
   没发生异常:把日志区inode放到元数据区

fdisk
m,p,n,d,w,q,l,t
cat /proc/partitons
partprobe [/dev/sda] ->partx


文件系统管理
重新创建文件系统会损坏原有文件
格式化分区->创建文件系统
fdisk -l
fdisk /dev/sda
  创建文件系统
  cat /proc/partitons
  partprobe

mkfs:make file system
文件系统类型:
    ext2
    ext3

cat /proc/filesystems 查看当前内核支持的文件系统

mkfs -t FSTYPE
mkfs -t ext2 /dev/sda5
mkfs -t ext3 /dev/sda7
mkfs -t ext2 = mkfs.ext2
mkfs -t ext3 = mkfs.ext3
mkfs.vfat /dev/sda6  fat32类型 类似windows的快速格式化

专门管理ext系列文件
mke2fs
    -j:创建ext3类型文件系统
    -b:BLOCK_SIZE:指定块大小,默认为4096,可用取值为1024,2048,4096
    -L:LABEL,指定分区卷标
    -m $:指定预留给超级用户用的块数百分比
    -i:用于指定为多少个字节的空间创建一个inode,默认为8192,这里给定的数值应该为块大小的2^n倍
    -N:指定创建inode个数
    -F:强制创建文件系统
    -E:用于指定额外的文件系统属性
blkid:查询或查看磁盘设备的相关属性
    UUID
    TYPE
    LABEL
blkid /dev/sda5

e2label 查看或定义卷标
    e2label /dev/sda5
    e2label /dev/sda5 HELLODATA
    
tune2fs:调整文件系统的相关属性
    -j:不损害原有数剧,将ext2升级为ext3
    -L:用于设定或修改卷标
    -m $:调整预留百分比
    -r #:指定预留块数
    -o:设定默认挂载选项
    -c #:指定挂在次数达到#次之后进行自检,0或-1表示关闭此功能
    -i #:每挂载使用多少天后进行自检,0或-1表示关闭此功能
    -l :显示超级块中的信息
tune2fs -j /dev/sda5    
tune2fs -L MYDATA /dev/sda5
tune2fs -l /dev/sda5

dumpe2fs:显示文件属性信息
    -h:只显示超级块中的信息
dumpe2fs /dev/sda5
dumpe2fs -h /dev/sda5

    
mke2fs -j /dev/sda5
mke2fs -b 2048 /dev/sda5
mke2fs -L MYDATA /dev/sda5
mke2fs -m 3 /dev/sda5
mke2fs -i 4096 /dev/sda5

fsck:检查并修复Linux文件系统
   -t PSTYPE :指定文件系统类型
   -a:自动修复
e2fsck:专用于修复ext2/ext3文件系统
   -f:强制检查
   -p:自动修复

挂载:将新的文件系统关联至当前根文件系统
卸载:将某文件系统与当前根文件系统的关联关系予以移除
mount:挂载
mount 设备 挂载点
     设备:
        设备文件:/dev/sda5
        卷标:LABEL=""
        UUID:UUID=""
     挂载点:目录
        要求:
            1.此目录没有被其他进程使用
            2.目录得事先存在
            3.目录中的原有文件将会暂时隐藏
挂载完成后,要通过挂载点访问对应文件系统上的文件
blkid /dev/sda5
mkdir /mnt/test
mount /dev/sda5 /mnt/test/
ls /mnt/test/

umount:卸载某文件系统
     umount 设备
     umount 挂载点
     写在注意事项:
        1.挂载的设备没有进程使用
umount /dev/sda5
umount /mnt/test

mount:显示当前系统已经挂载的设备及挂载点
mount [options] [-o options] DEVICE MOUNT_POINT
   -a:表示挂载/etc/fstab文件中定义的所有文件系统
   -n:默认情况下,mount命令每挂载一个设备,都会把挂载的设备信息保存至/etc/mtab文件;
      使用-n选项意味着挂载设备时,不把信息写入此文件
   -t FSTYPE: 指定正在挂载设备上的文件系统的类型;不使用此选项时,mount会调用blkid命令获取对应文件系统的类型;
   -r: 只读挂载,挂载光盘时常用此选项
   -w: 读写挂载
    
   -o: 指定额外的挂载选项,也即指定文件系统启用的属性;
        remount: 重新挂载当前文件系统
        ro: 挂载为只读
        rw: 读写挂载
挂载一个光盘
ls -l /dev/cdrom
mount /dev/cdrom /media/
umount /media/
mount -r /dev/cdrom /media/
mount -o ro /dev/cdrom /media/
mount -o remount /dev/cdrom /media/
mount /dev/sda5 /mnt/test
mount
mount -o remount,ro /dev/sda5
mount

mount命令,可以挂载iso镜像:
mount DEVICE MOUNT_POINT
    -o loop:挂载本地回环设备
wget ftp://172.16.0.1/pub/isos/rhci-5.8.1.iso
mount -o loop /root/rhci-5.1-1.iso /media/
    

练习:
1、创建一个2G的分区,文件系统为ext2,卷标为DATA,块大小为1024,预留管理空间为磁盘分区的8%;挂载至/backup目录,要求使用卷标进行挂载,且在挂载时启动此文件系统上的acl功能;
# mke2fs -L DATA -b 1024 -m 8  /dev/sda7

# mount -o acl LABEL=DATA /backup

# tune2fs -o acl /dev/sda7
# mount LABEL=DATA /backup

2、将此文件系统的超级块中的信息中包含了block和inode的行保存至/tmp/partition.txt中;
# tune2fs -l | egrep -i  "block|inode" >> /tmp/partition.txt  
# dumpe2fs -h |
3、复制/etc目录中的所有文件至此文件系统;而后调整此文件系统类型为ext3,要求不能损坏已经复制而来的文件;
# cp -r /etc/*  /backup
# tune2    -j /dev/sda7
4、调整其预留百分比为3%;
# tune2fs -m 3 -L DATA /dev/sda7
5、以重新挂载的方式挂载此文件系统为不更新访问时间戳,并验正其效果;
# stat /backup/inittab
# cat /backup/inittab
# stat
 
# mount -o remount,noatime /backup
# cat
# stat

6、对此文件系统强行做一次检测;
e2fsck -f /dev/sda7
7、删除复制而来的所有文件,并将此文件系统重新挂载为同步(sync);而后再次复制/etc目录中的所有文件至此挂载点,体验其性能变化;
# rm -rf /backup/*
# mount -o remount,sync /backup
# cp -r /etc/* /backup

swap(交换空间)

x86(32)
虚拟地址,线性地址
物理内存
free:查看当前系统物理内存和交换空间使用情况
   -m:以MB为单位显示

fdisk命令中,调整分区类型为82;
创建交换分区
mkswap /dev/sda8
      -L LABEL
swapon /dev/sda8
      -a:启用所有的定义在/etc/fstab文件中的交换设备
swapoff /dev/sda8

回环设备
loopback:使用软件来模拟实现硬件

dd命令:
   if=inputfile
   of=outputfile
   bs=1
   count=2
   seek=#:创建数据文件时,跳过的空间大小
dd if=/etc/inittab of=/root/inittab
cat /root/inittab

dd if=/dev/sda of=/mnt/usb/mbr.backup bs=512 count=1 备份mbr
dd if=/mnt/usb/mbr.backup of=/dev/sda bs=512 count=1

cat /dev/cdrom > /root/rhel5.iso 制作iso

dd if=/dev/zero of=/var/swapfile bs=1M count=1024
ls -lh /var/swapfile
mkswap /var/swapfile
free -m
swapon /var/swapfile

dd if=/dev/zero of=/var/swapfile2 seek=1023 bs=1M count=1
du -sh /var/swapfile2

文件系统的配置文件/etc/fstab
    os在初始化时,会自动挂载此文件中定义的每个文件系统
要挂载的设备 挂载点 文件系统类型 挂载选项 转储频率(没多少天做一次备份) 文件系统检测次序(只有根为1)
vim /etc/fstab
/dev/sda5  /mnt/test  ext3 defaults 0 0
mount -a:挂载/etc/fstab文件中定义的所有文件系统
mount

fuser:验证进程正在使用的文件或套接字文件
   -v:查看某文件上正在运行的进程
   -k:
   -m:
   -km MOUNT_POINT:终止正在访问此挂载点的所有进程
fuser -v /mnt/test
fuser -km /mnt/test
umount /mnt/test


练习:
1、创建一个5G的分区,文件系统为ext3,卷标为MYDATA,块大小为1024,预留管理空间为磁盘分区的3%,要求开机后可以自动挂载至/data目录,并且自动挂载的设备要使用卷标进行引用;
2、创建一个本地回环文件/var/swaptemp/swapfile来用于swap,要求大小为512MB,卷标为SWAP-FILE,且开机自动启用此交换设备;
# mkdir /var/swaptemp
# dd if=/dev/zero of=/var/swaptemp/swapfile bs=1M count=512
# mkswap LABLE=SWAP-FILE /var/swaptemp/swapfile

/etc/fstab
/var/swaptemp/swapfile      swap        swap        defaults        0 0
3、上述第一问,如何让其自动挂载的同时启用ACL功能;
/etc/fstab
LABEL='MYDATA'        /data        ext3        defaults,acl    0 0

ext2: 文件系统块组组成:
超级块、GDT、block bitmap、inode bitmap、data blocks

文件系统挂载时的注意事项:
1、挂载点事先存在;
2、目录是否已经被其它进程使用;
3、目录中的原有文件会被暂时隐藏;

mount DEVICE MOUNT_POINT
1、设备文件;
2、LABEL
3、UUID

/etc/fstab文件格式:
设备        挂载点        文件系统类型        挂载选项        转储频率  检测次序

tune2fs
    -l
    -L
    -o
dumpe2fs -h


安装RHEL6.3 x86_64的方法(前提:请确保你的CPU支持硬件虚拟化技术):
1、创建虚拟机;
2、下载isos目录中的rhci-rhel-6.3-1.iso,并导入虚拟机的虚拟光驱;
3、在boot提示符输入:linux ip=172.16.x.1 netmask=255.255.0.0 gateway=172.16.0.1 dns=172.16.0.1 ks=http://172.16.0.1/rhel6.cfg