【[email protected]基础篇 ~】# 磁盘与文件系统

之前三篇文章我们简单介绍了Linux系统的用户管理,文件操作等,都是比较浅显的基本操作。这节我们要深入一下了,从文件系统我们要看到磁盘系统。从磁盘系统我们要看到操作系统的整体架构。废话不多少让我们开始学习吧!

磁盘与文件系统

1、磁盘系统

1.1 磁盘结构

如图所示,磁盘由扇区和柱面组成,分区的最小单位是柱面(柱是有厚度的,本图是截面图),磁盘读取的最小单位是扇区。第一扇区的MBR(446bytes)分区表可以最大包含四个分区(64bytes)的信息,即从开始柱面到结束柱面4组数据,每组16个字节,每个值8个字节,即柱号最大为2^16-1。扩展分区由主分区组成,扩展分区分出的分区称为逻辑分区。主分区与扩展分区最多可以4个;扩展分区最多只能一个;能够被格式化后作为数据访问的分区为主分区和逻辑分区,扩展分区无法格式化。SATA硬盘逻辑分区从5-15,IDE硬盘逻辑分区从5-63。

1.2 查看挂载的设备

Linux分区表示可可挂载的设备,每个分区上可以挂载相应的文件系统(目录)

[[email protected] ~]$ df -h [文件或目录]
Filesystem            Size  Used Avail Use% Mounted on
/dev/sda3              16G  2.4G   13G  16% /
tmpfs                 935M   72K  935M   1% /dev/shm
/dev/sda1             291M   37M  240M  14% /boot

-h human read

通过df -h 我们可以查看目前文件系统挂载的设备,不加文件/目录默认列出所有的文件系统。

其中Size是指磁盘总容量,Use指已使用的,Avail指可用的剩余容量,Use%使用率 = Use/(Use+Avail)

1.3 磁盘分区

1.31 查看所有分区

[[email protected] weijie]# fdisk -l #查看所有分区

Disk /dev/sda: 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: 0x000a4289

Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *           1          39      307200   83  Linux
Partition 1 does not end on cylinder boundary.
/dev/sda2              39         549     4096000   82  Linux swap / Solaris
Partition 2 does not end on cylinder boundary.
/dev/sda3             549        2611    16567296   83  Linux

上面信息显示,sda磁盘有21.5G大小(21474836480字节)255个磁头管理读写,每个磁头管理63个扇区,每个扇区512字节,共有5005个柱面。

Device:设备文件名,依据不同的磁盘接口/分区位置而变。

Boot:表示是否为开机引导模块 * 表示是的

Start,End:表示这个分区在哪两个柱面号码之间,可确定此分区的大小。

Blocks:就是以1K为单位的容量。

ID,System:代表分区的文件系统。

1.32 新建/删除一个分区

fdisk  /dev/sda3

操作命令:

d 删除一个分区

n 新增一个分区 新增分区的条件是由剩余未分配的空间或是有扩展分区,可分逻辑分区。

m 打印命令提示

p 在屏幕上显示分区表

q 不保存分区修改,退出程序

w 保存修改并退出

+512M 设置容量时可用+容量的方法

1.4 磁盘格式化

磁盘格式化主要使用mkfs和mke2fs两个命令

mkfs [-t 文件系统格式] 设备文件名

mke2fs [-b block大小] [-i block/node一个node分配多少block] [-L卷标] [-c检查磁盘错误] [-j 系统格式为ext3(有journeal功能),不加则为ext2]

1.5 磁盘检测

检查文件系统是否出错

fsck [-t 文件系统ext2/ext3] [-A扫描设备] [-C检查过程中 用直方图显示] [-a自动修复有问题的扇区] [-y 与a类似,用于某些文件系统] 设备名称

检查硬盘或软盘扇区是否有坏道

badblock [-s屏幕上显示进度] [-v可以在屏幕上看到进度] [-w使用写入的方式来测试] 设备名称

1.6 磁盘挂载和卸载

说到挂载首先介绍/etc/fstab配置文件,我们先用cat命令来查看一下:

[[email protected] weijie]# cat /etc/fstab

#
# /etc/fstab
# Created by anaconda on Sun Jan 25 07:14:00 2015
#
# Accessible filesystems, by reference, are maintained under ‘/dev/disk‘
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
UUID=411dd466-551a-4ef2-a9b4-682b646aa308 /                       ext4    defaults        1 1
UUID=967157df-1cd7-42a6-9b0a-56e94fce0d1a /boot                   ext4    defaults        1 2
UUID=331eec8a-c9a7-4b86-a63d-3f5e9cf64a71 swap                    swap    defaults        0 0
tmpfs                   /dev/shm                tmpfs   defaults        0 0
devpts                  /dev/pts                devpts  gid=5,mode=620  0 0
sysfs                   /sys                    sysfs   defaults        0 0
proc                    /proc                   proc    defaults        0 0、

配置文件参数说明:

1=>磁盘设备文件名或该设备的卷标Label

2=>挂载目录

3=>磁盘分区的文件系统 ext3,reiserfs,nfs,vfat等

4=>文件系统参数用逗号隔开

async/sync 同步或异步

auto/noauto 是否被mount -a 主动测试挂载

rw/ro 是否只读或可读写

exec/noexec 是否用于执行,或是纯数据

user/nouser 是否允许用户使用mount来挂载(非root)

suid/nosuid 是否有suid权限,不是放执行文件则不需要这个权限

usrquta 启动文件系统支持磁盘配额

grpquota 启动文件系统对群组磁盘配额模式支持

mode 设置挂载点权限最大为666

uid=000 设置允许uid=000用户操作

gid=000 同上

defaults 默认设置

5=>是否被dump备份命令作用 0:不备份 1:每天dump 2:不定期dump

6=>是否以fsck检查扇区 0:不需要检查 1:最先检查 2:其次检查

mount命令

mount [-a]根据配置文件将没有挂载的磁盘都挂载上来

mount [-l] 显示所有挂载列表

mount [-t文件系统] [-L label 名] [-o 额外选项] [-n 写入/etc/mtab] 设备文件名 挂载目录

-o

ro,rw 挂载只读或可读写

auto,noauto 是否被mount -a自动挂载

remount 重新挂载

EX:我们把 mp3插入usb接口,并挂载到/mnt/mp3player

[[email protected] mnt]# fdisk -l
Disk /dev/sdb: 3711 MB, 3711959040 bytes在mnt下新增挂载目录mp3player

[[email protected] mnt]# mkdir mp3player

[[email protected] mnt]# mount -t vfat -o iocharset=cp950 /dev/sdb /mnt/mp3player/

vfat支持设置iocharset=cp950 中文语言显示

mount命令都是临时挂载,重启后失效,因此永久挂载需要修改配置文件。

同样卸载一个挂载umount [-f 强制] [-n不更新/etc/mtab] 挂载设备或挂载点

[[email protected] /]# umount -fn /media/WALKMAN/

2、文件系统

2.1 文件系统概览

Linux的文件系统是Ext2-4,即inode-block。

每个文件和目录都有自己的inode,每个inode都有对应的block号码,通过文件的inode找到相应的block。一个文件可能由多个block组成。

同时,每个分区又可以分为一个block 组,每个组都包含superblock,文件系统描述(File system description),块对应表(block bitmap),inode对应表(inode bitmap),inode Table和data block。因此每个挂载的文件系统都可以看成由block组成的。

2.2 文件系统详述

Superblock

superblock记录整个文件系统相关信息。inode/block总量,未使用和已使用的block和inode总量。block与inode大小(block大小为1k,2k或4k, inode为128bytes)

文件系统挂载时间、最近一次写入数据的时间、最近一次检验磁盘(fsck)的时间等文件先关信息。validbit值,若此文件系统已被挂载,则validbit为0,若没有被挂载,则为1。

File system Description

这个区段描述每个block group的开始和结束block号码,以及说明每个区段(superblock,bitmap,inode,data block)分别介于哪一个block号码之间。这部分也能够用dumpe2fs来查看。

[[email protected] ~]$ sudo dumpe2fs /dev/sda1
[sudo] password for david:
dumpe2fs 1.41.12 (17-May-2010)
Filesystem volume name:   <none>
Last mounted on:          /boot
Filesystem UUID:          967157df-1cd7-42a6-9b0a-56e94fce0d1a
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 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:              76912 #inode 总数
Block count:              307200 #block 总数
Reserved block count:     15360 #保留block数量
Free blocks:              260295 #空闲block
Free inodes:              76873 #空闲inode
First block:              1 #第一个block序号
Block size:               1024 #block大小
Fragment size:            1024
Reserved GDT blocks:      256
Blocks per group:         8192
Fragments per group:      8192
Inodes per group:         2024
Inode blocks per group:   253
Flex block group size:    16
Filesystem created:       Sun Jan 25 07:12:55 2015
Last mount time:          Mon Feb 23 21:00:34 2015
Last write time:          Mon Feb 23 21:00:34 2015
Mount count:              9
Maximum mount count:      -1
Last checked:             Sun Jan 25 07:12:55 2015
Check interval:           0 (<none>)
Lifetime writes:          41 MB
Reserved blocks uid:      0 (user root)
Reserved blocks gid:      0 (group root)
First inode:              11
Inode size:               128
Journal inode:            8 #指向journal块的inode号
Default directory hash:   half_md4
Directory Hash Seed:      284e552c-ef40-4b71-95e9-9b2ace7b1d52
Journal backup:           inode blocks
Journal features:         (none)
Journal size:             8M   #日志文件大小
Journal length:           8192 #日志长度
Journal sequence:         0x00000036
Journal start:            0

Group 0: (Blocks 1-8192) [ITABLE_ZEROED]
  Checksum 0x84ca, unused inodes 2006
  Primary superblock at 1, Group descriptors at 2-3
  Reserved GDT blocks at 4-259
  Block bitmap at 260 (+259), Inode bitmap at 276 (+275)
  Inode table at 292-544 (+291)
  3836 free blocks, 2006 free inodes, 2 directories, 2006 unused inodes
  Free blocks: 4357-8192
  Free inodes: 19-2024
Group 1: (Blocks 8193-16384) [INODE_UNINIT, ITABLE_ZEROED]
  Checksum 0xe5d9, unused inodes 2024
  Backup superblock at 8193, Group descriptors at 8194-8195
  Reserved GDT blocks at 8196-8451
  Block bitmap at 261 (+4294959364), Inode bitmap at 277 (+4294959380)
  Inode table at 545-797 (+4294959648)
  1346 free blocks, 2024 free inodes, 0 directories, 2024 unused inodes
  Free blocks: 11089-12288, 16239-16384
  Free inodes: 2025-4048

block bitmap

block bitmap中记录那些block是空的,哪些block是不可用的,同样释放空间后也会修改block bitmap。

inode bitmap

记录未使用/已使用的inode号码。

inode table

记录文件属性和文件实际数据放置的第几号block内。

主要记录内容有:文件的访问权限(read/write/execute),文件的所有者和组(owner/group),文件的大小,创建时间和状态改变时间(change time),最近访问时间(access time),最近修改时间(modify time),定义文件特性的标志,如SetUID;该文件真正内容指向

(pointer)——block 序号

如图所示,记录block号码的结构又可分为12个直接指向,1个间接号,1个双间接号,1个三间接号。

假设1个block大小为1k,因此一个inode能够指向的block总额为12+256+256*256+256*256*256=16G。

2.3 查看inode

ls -i [目录/文件] 查看inode

783363 dr-xr-xr-x.   2 root root  4096 Jan 31 04:26 bin
     2 dr-xr-xr-x.   5 root root  1024 Jan 25 07:45 boot
     4 drwxr-xr-x.  18 root root  3900 Feb 23 21:01 dev
130562 drwxr-xr-x. 101 root root 12288 Feb 23 21:01 etc
783364 drwxr-xr-x.   4 root root  4096 Feb  1 05:03 home
522247 dr-xr-xr-x.  10 root root  4096 Jan 25 07:28 lib
522244 dr-xr-xr-x.   9 root root 12288 Jan 31 04:26 lib64
    11 drwx------.   2 root root 16384 Jan 25 07:13 lost+found
783365 drwxr-xr-x.   4 root root  4096 Feb 22 21:50 media
783366 drwxr-xr-x.   3 root root  4096 Jan 25 07:47 mnt
522250 drwxr-xr-x.   3 root root  4096 Jan 24 23:49 opt
     1 dr-xr-xr-x. 152 root root     0 Feb 23 20:59 proc
652802 dr-xr-x---.   3 root root  4096 Feb  7 05:38 root
783367 dr-xr-xr-x.   2 root root 12288 Jan 31 04:26 sbin
     1 drwxr-xr-x.   7 root root     0 Feb 23 20:59 selinux
522251 drwxr-xr-x.   2 root root  4096 Jun 28  2011 srv
     1 drwxr-xr-x.  13 root root     0 Feb 23 20:59 sys
522242 drwxrwxrwt.  14 root root  4096 Feb 23 21:50 tmp
652805 drwxr-xr-x.  13 root root  4096 Jan 25 07:15 usr
261121 drwxr-xr-x.  21 root root  4096 Jan 25 07:35 var

我们可以看到sys selinux proc 都指向1号的inode说明这三个文件内容完全一模一样。

2.4 查看文件系统容量

1.2中已经介绍过用df来查看文件系统的容量了,还有一个命令du可以查看文件系统的容量,主要区别是这个命令会到系统中查找所有的文件数据。默认以kb显示

-m以兆单位显示

[[email protected] ~]$ du -S
4       ./.mozilla/extensions
4       ./.mozilla/plugins
4       ./.mozilla
4       ./.gnome2
24      .

2.5 连接文件

2.51 硬连接 hard link

在root目录下新增一个/etc/crontab的硬链接

[[email protected] ~]# ln /etc/crontab ./crontab

[[email protected] ~]# ll -i /etc/crontab /root/crontab
132712 -rw-r--r--. 2 root root 457 Jun  3  2011 /etc/crontab
132712 -rw-r--r--. 2 root root 457 Jun  3  2011 /root/crontab

我们可以看到硬链接的inode是一样的,硬链接的两个文件删除任何一个,则他们的inode和block仍然存在,编辑任何一个文件,最终结果都会被写入相同的inode和block中。

因此我们称硬链接是安全的!但是hard link有两个缺点1、不能跨文件系统2、不能连接到目录。

2.52 软连接 symbolic link

软链接我们又可以成为符号链接,即像windows中的快捷方式。很容易理解,当源文件被删除后,点击快捷方式时,就会显示无法打开文件了。

我们在root目录下新增一个/etc/crontab的快捷方式

[[email protected] ~]# ln -s /etc/crontab /root/crontab2

软连接会占用自己的inode和block

[[email protected] ~]# ll -i crontab
132712 -rw-r--r--. 2 root root 457 Jun  3  2011 crontab

-s 创建一个symbolic link

-f 强制创建,如果目录下已经有这个文件则直接删除后新建

3、参考资料

《鸟哥的私房菜 Linux基础篇》

时间: 2024-10-04 19:48:08

【[email protected]基础篇 ~】# 磁盘与文件系统的相关文章

【[email&#160;protected]基础篇 ~】# 用户管理

经过前两篇文章的洗礼,相信大家对Linux的基本操作已有了大致的了解,今天我们来讲解一下Linux的用户管理,大家最熟悉的可能还是root用户,就是超级管理员么,具有神的权限.但是很多情况下,为了给其他用户登录和操作系统,我们需要创建其他非管理员用户并给他们分配一定的权限,以确保系统在多用户的情况下系统安全.那现在我们就开始学习吧,stay hungary, stay foolish! 用户管理 1.新建用户 1.1 创建一个普通账户 新建用户主要用useradd这个命令 [[email pro

【[email&#160;protected]基础篇 ~】# 文件管理

上一篇我们讲了vi编辑器,是不是很嗨,还有意犹未尽的干脚,vi编辑器确实功能强大无比,话说把linux作为开发平台也是很不错的选择.神啊,早点让我强大起来吧!千里之行始于足下,我们还是步步为营,今天我们讲解一下常用的文件操作命令,就如同windows的资源管理器.对于一个命令高手,在linux中操作绝对比你用资源管理器快n倍,你信不?等成为大牛了你就体会到了,哈哈~   文件管理 1.目录操作 1.1 创建目录 [[email protected] ~]# mkdir contentName 1

【[email&#160;protected]基础篇 ~】# vi/vim 命令

今天开始学习Linux,学习过程中我会在这里记下一些学习笔记,先从基础的学起,万事开头难,因此我会坚持!当下Linux系统已经有很多版本了,Linux其实就是Unix的衍生版本,以L开头是因为它的创始人Linus,Unix是Unique + X版本号的缩写...关于Unix和Linux的起源有很长的计算机史要讲,本教程不讲历史,只谈技术哦.本教程本着先易后难的原则进行的,所以基础命令篇以Red Hat 6.0 企业版为实验机器.先从基础命令和系统管理学起,循序渐进,后面会有shell脚本编程.服

【[email&#160;protected]基础篇 ~】# 打包与备份

学到这里,相信大家对Linux已经不再陌生,这节就讲讲比较轻松而且实用的话题——打包和备份.首先我们要熟悉的是Linux有哪些压缩文件和备份文件,分别是那些命令以及它们应用的合适场景.之后我们只要把命令敲熟了就OK了.   打包与备份 1 常见压缩文件的压缩和解压 --------------------------------------------- .tar 解包:tar xvf FileName.tar 打包:tar cvf FileName.tar DirName ----------

基于@AspectJ和schema的aop(二)[email&#160;protected]基础语法

@AspectJ使用jdk5.0和正规的AspectJ切点表达式描述切面, 由于spring只支持方法的连接点,所以Spring只支持部分AspectJ的切点语言. 1.切点表达式函数 AspectJ 5的切点表达式有关键字和操作参数组成,如execution(* greetTo(..))的切点表达式, execution为关键字, "* greetTo(..)"为操作参数.在这里execution表示目标类执行某一方法, 而"* greetTo(..)"描述目标方

Linux基础篇三:文件系统

/bin      实际上是  /usr/bin /sbin    实际上是  /usr/sbin /usr/bin 里面的命令其实是依赖  /lib64  或者    /lib32 ldd  /usr/bin/cp     (查看和CP命令先关的库文件),如果删除或者移动这些库文件,这些命令将无法使用 /etc/目录 下重要的目录及文件 /etc/sysconfig/network-scripts/ifcfg-ens33 /etc/hostname /etc/resolv.conf /etc/

Linux基础之磁盘概念及其管理工具fdisk

引言:冯诺依曼体系中的数据存储器就是我们常说的磁盘或硬盘,它是计算机不可缺少的一个组件,下面来看看Linux中磁盘的基础概念及管理工具fdisk 实验环境CentOS7.2 磁盘概念 按磁盘属性分类有机械硬盘跟固态硬盘 (1)机械硬盘:内部真空 磁盘:正反面含有磁性物质的盘片,由一个马达固定所有磁盘转动,固定角速度 每个盘片正反面各有一个磁头,所有磁头固定在一个机械臂上 平均寻道时间:5400rpm, 7200rpm, 10000rpm, 15000rpm转速 track(磁道):每个盘片上出厂

DFS分布式文件系统--基础篇

DFS分布式文件系统--基础篇 DFS是将相同的文件同时存储到网络上多台服务器上后,就可以有以下功能和优点: 提高文件的访问效率:DFS服务器会向客户端提供一个服务器列表,列表中的这些服务器内部有客户端所需要的文件.DFS会将最接近客户端的服务器,放在列表最前面,以便让客户端优先从这台服务器来访问文件 . 提高文件的可用性:当提供资源的服务器列表中的某一台服务器出现故障,客户端仍然可以从列表中的下一台服务器获取所需要的文件,即DFS提供排错功能. 服务器负载平衡功能:由于存放相同文件,有可能有多

性能测试进阶指南——基础篇之磁盘IO

本文旨在帮助测试人员对性能测试常用指标做一个简单的讲解,主要包括CPU.内存.磁盘和网络带宽等系统资源,本文仅仅局限于Linux系统,Windows Server系统暂不做考虑. 使用iostat分析IO性能 对于I/O-bond类型的进程,我们经常用iostat工具查看进程IO请求下发的数量.系统处理IO请求的耗时,进而分析进程与操作系统的交互过程中IO方面是否存在瓶颈. 下面通过iostat命令使用实例,说明使用iostat查看IO请求下发情况.系统IO处理能力的方法,以及命令执行结果中各字