首页 > 代码库 > linux     文件系统

linux     文件系统

一、文件系统简介

        文件系统是操作系统用于明确 磁盘或分区上的文件的方法和数据结构;即在磁盘上组织文件的方法。也指用于存储文件的磁盘或分区,或文件系统种类。操作系统中负责管理和存储文件信息的软件机构称为文件管理系统,简称文件系统。文件系统由三部分组成:与文件管理有关软件、被管理文件以及实施文件管理所需数据结构。从系统角度来看,文件系统是对文件文件存储空间进行组织和分配,负责文件存储并对存入的文件进行保护和检索的系统。具体地说,它负责为用户建立文件,存入、读出、修改、转储文件,控制文件的存取,当用户不再使用时撤销文件等。

1、对文件操作的实际意义

文件被删除:inode被标记为空闲,此inode指向的磁盘块被标记为空闲;如果inode被引用了多次,且此次删除未使得其引用计数降低为的话,这意味着文件被删除仅删除了一个访问路径;

文件复制:创建一个新文件,并原文件中数据在新文件指向的磁盘块中再写一次的过程;

文件移动:在同一个分区移到:移动文件仅是改变了文件访问路径;跨分区移到:在新分区创建文件,把数据复制过去,删除原分区数据;

2、Linux的文件系统的类型:

ext(2,3,4), xfs, ffs, ufs, reiserfs, jfs, vfat(fat32), ntfs

交换文件系统:swap

网络文件系统:nfs, smbfs(cifs)

分布式文件系统:ceph

光盘文件系统:isso9660

btrfs, 

二、linux分区的创建

1、物理意义

硬盘分区:

磁道:track

扇区:sector

柱面:cylinder:

分区根据柱面划分

MBR:Master Boot Record

主引导记录

512Bytes: 引导启动OS

446bytes: 程序,bootloader

64bytes: 分区表,每16bytes标记一个分区,一共4分区

2bytes: 5A, MBR有效性标记

1T: 3主+1扩展(切割1个或多个逻辑)

2、逻辑分区意义

分区创建基本命令

查看:fdisk -l [DEVICE]...

创建分区:fdisk [DEVICE]

交互式界面,有许多子命令

p: 显示磁盘分区表

n: new,新建分区

d: delete,删除分区

t: 修改分区的系统ID

l: 列表出所有已经的系统ID

w: 保存并退出

q: 不保存退出

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

 

Command (m for help): n    创建主分区

Command action

   e   extended       逻辑分区

   p   primary partition (1-4)     主分区

p

Partition number (1-4): 1    第一个分区

First cylinder (1-2610, default 1):  开始块

Using default value 1

Last cylinder, +cylinders or +size{K,M,G} (1-2610, default 2610): +6G   划分6g容量

 

Command (m for help): t     修改文件类型

Selected partition 1

Hex code (type L to list codes): 8e   文件类型(Linux LVM)

Changed system type of partition 1 to 8e (Linux LVM)

 

Command (m for help): p     查看分区

 

Disk /dev/sdb: 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: 0xba762e8d

   Device Boot      Start         End      Blocks   Id  System

/dev/sdb1               1         393     6156741   8e  Linux LVM    分区总的信息

3、让内核读取到分区信息

对于已经有分区处于使用状态的磁盘来讲,新建分区后需要让内核重读其分区表:

CentOS 5:

# partprobe [DEVICE]

CentOS 6:

partx -a [DEVICE]

kpartx -af  [DEVICE]

4、链接文件

创建链接:

ln [-sv] SRC DEST

        硬链接:

不能对目录文件创建硬链接;

硬链接不能跨分区

创建硬链接会增加inode引用计数

        符号链接:

可以对目录创建

不受分区限制

对文件创建符号链接不会增加引用计数

[root@dingchao tmp]# ln zip.sh /   创建一个硬链接

[root@dingchao tmp]# ls -li      查看inode节点

1179963 -rw-r--r--  2 root root    0 Jul 12 00:00 zip.sh

[root@dingchao /]# ls -li

1179963 -rw-r--r--  2 root root    0 Jul 12 00:00 zip.sh    inode节点相同

创建软连接

[root@dingchao tmp]# ln -s zip.sh /etc        创建软连接

[root@dingchao tmp]# ls -al                   查看文件

-rw-r--r--   2 root root    0 Jul 12 00:00 zip.sh   源文件

[root@dingchao tmp]# cd /etc

[root@dingchao etc]# ls -al

lrwxrwxrwx    1 root root      6 Jul 12 10:17 zip.sh -> zip.sh    目标链接文件

5、创建文件系统:

mkfs : make file system

-t FSTYPE [DEVICE]

               mkfs -t FSTYPE = mkfs.FSTYPE

       mkfs -t ext4 = mkfs.ext4

注意:CentOS

Linux内核是模块化的,这些模块支持动态装载和卸载;

        文件系统可能会被直接打包进内核,也可以被编译成内核模块;

6、文件格式化

            mke2fs:

-t {ext2|ext3|ext4}:指定文件系统 

-b {1024|2048|4096}:指定块大小

-L LABEL: 打标

-j: 相当于 -t ext3

-i #: 每多少字节给创建一个inode,此字节数不应该少小块大小

-N #: 直接指定可用的inode数;

-m #: 指定预留空间占整个分区空间的百分比;默认为5;

                  -O:指定分区特性

[root@localhost ~]# mkfs -t ext4 /dev/sdb1 格式化分区sdb1

                                  物理磁盘结构示意图

            wKioL1PGkfKCoV4YAADIU0zLK3Y265.jpg

7、文件系统挂载

文件系统挂载:默认只有管理员才有权限

将额外的分区与根文件系统上的某目录建立关联关系的过程;

目录中的原有文件会被隐藏

挂载点:另一个文件系统的访问入口

挂载: mount DEVICE MOUNT_POINT

固定挂载点:/mnt, /media

mount [option]... [-t fstype] [-o option]  设备  挂载点

挂载点:

1、事先存在;

2、使用空闲目录;

常用的挂载选项:

-t fstype:指定文件系统类型

-r: readonly, 只读挂载

-w: read and write, 读写挂载

-L LABEL:以卷标方式指定设备, mount -L MYDATA 挂载点

-U UUID: 以UUID的方式指定设备,mount UUID=‘uuid‘ 挂载点, mount -U uuid 挂载点

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

-n: 挂载时,不更新/etc/mtab文件

-o option: 

async:异步I/O,数据写操作先于内存完成,而后再根据某种策略同步至持久设备中

sync: 同步I/O,

atime/noatime: 文件和目录被访问时是更新最近一次的访问时间戳

auto/noauto:设备是否支持mount的-a选项自动挂载

diratime/nodiratime: 目录被访问时是更新最近一次的访问时间戳

dev/nodev: 是否支持在此设备上使用设备;

exec/noexec: 是否允许执行此设备上的二进制程序文件

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

remount: 重新挂载,通常用于不卸载的情况下重新指定挂载选项

ro: 只读

rw: 读写

user/nouser: 是否允许普通挂载此文件设备

acl: 在此设备是支持使用facl,默认不支持;

[root@localhost ~]# mount /dev/sdb1 /tmp/mnt      挂载设备sdb1到/tmp/mnt目录下

                    至此所分好的区就可以使用啦






本文出自 “天涯海角” 博客,谢绝转载!