Linux(4)文件系统

1 一切都是文件

Linux系统下,命令、磁盘、文件、目录等都是文件

2 文件的分类

1.文件的表示

  • -普通文件 可以cat more出来
  • d 目录文件:目录,存储文件的唯一地方
  • l 链接文件:指向同一个文件或目录的文件
  • 磁盘设备文件(在/dev下):
    b 块设备文件:与系统外设相关的。支持以块为单位进行随机访问。
    c 字符设备文件:支持以字符为单位进行访问
  • p 管道(PIPO)文件:提供进程之间通信的一种方式。
  • s 套接字(socket)文件:与网络通信有关。

2.查看文件相关信息
ls -l
file 【文件名】
stat

3 文件系统

层级结构:目录和文件的一个组合层级结构,起点是根/,组成一个倒置的树状结构

[root@yr /]#df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/mapper/VolGroup00-LogVol00                     #第一个文件系统(相当于windows的C盘)
                       35G  2.4G   31G   8% /
/dev/sda1              99M   23M   71M  25% /boot   #另一个文件系统/另一个分区
tmpfs                 995M     0  995M   0% /dev/shm
/dev/sr0              3.6G  3.6G     0 100% /media/OL5.7 x86_64 dvd 20110728

文件系统指文件存在的物理空间
Linux系统中每个分区都是一个文件系统,都有自己的目录层次结构
一个操作系统的运行离不开对文件的操作,因此必然要拥有并维护自己的文件系统(因为一切都是文件)

4 文件系统filesystem的命名规则

  • 严格区分大小写
  • 目录也是文件,在同一个路径下,两个文件不能同名
  • 支持使用除了/以外的所有字符
  • 最长不能超过255字符

5 filesystem类型

  • ext2:早期Linux中常用的文件系统

  • ext3:ext3升级版,带日志功能

  • FAT:Windows XP操作系统的文件系统

  • NTFS:Windows NT/XP操作系统采用的文件系统

  • NFS:网络文件系统,用于远程文件共享

  • XFS:新版本的Linux的文件系统,支持大容量文件

  • MS-DOS:MS-DOS文件系统

  • VFAT:Windows 95/98操作系统的文件系统

  • RAMFS:内存文件系统,速度很快

  • HPFS:OS/2操作系统采用的文件系统

  • PROC:虚拟的进程文件系统

  • ISO9660:大部分光盘所采用的文件系统

  • ufsSun:OS所采用的文件系统

  • NCPFS:Novell服务器所采用的文件系统

  • SMBFS:Samba的共享文件系统

  • JFS:IBM的AIX使用的日志文件系统

  • ReiserFS:基于平衡树结构的文件系统

6 文件系统特性

  • 当划分磁盘分区并格式化的时候,整个分区会被划分为两个部分,即inode和data block
    在这里插入图片描述
  • 实际数据放置在data area,文件在一个文件系统的唯一标识在inode area
  • inode是(目录、文件)文件在一个文件系统中的唯一标识,需要访问这个文件的时候必须先找到并读取这个文件的inode。inode存储了文件的重要参数,其中唯一标识称作Inumber,其他信息还有创建时间ctime(create time)、修改时间mtime(modified tine)、owner、group、读写权限、数据所在的block号等。
[root@yr /]#ls -ldi hr
98307 drwxrwxrwx 3 root hr 4096 Jan 13 11:34 hr
# 都是98307
[root@yr /]#stat hr
  File: `hr'
  Size: 4096            Blocks: 8          IO Block: 4096   directory
Device: fd00h/64768d    Inode: 98307       Links: 3                     
Access: (0777/drwxrwxrwx)  Uid: (    0/    root)   Gid: ( 5001/      hr)
Access: 2019-01-14 10:45:24.000000000 +0800
Modify: 2019-01-13 11:34:46.000000000 +0800
Change: 2019-01-13 11:55:20.000000000 +0800

7 链接文件

7.1 软链接
  • 软链接:类似于Windows的快捷方式。软连接就是建立一个独立的文件,而这个文件会让数据的读取指向它link的文件,只是作为一个指向的动作,所以当来源文件被删除,软连接的文件无法开启,因为找不到原始档名。
  • 它实际上是⼀个特殊的文件。在符号连接中,文件实际上是⼀个文本文件,其中包含的有另⼀文件的位置信息。比如:A是B的软链接(A和B都是文件名),A的目录项中的inode节点号与B的目录项中的inode节点号不相同,A和B指向的是两个不同的inode,继而指向两块不同的数据块。但是A的数据块中存放的只是B的路路径名(可以根据这个找到B的目录项)。A和B之间是“主从”关系,如果B被删除了,A仍然存在(因为两个是不同的文件),但指向的是⼀个无效的链接。
  • ln -s 源文件及路径 目标路径及文件名
[root@yr /]#ln -s /root/install.log /l_install.log
[root@yr /]#ll /l_install.log
lrwxrwxrwx 1 root root 17 Jan 14 13:06 /l_install.log -> /root/install.log

找不到源文件时,会红色闪烁

7.2 硬链接
  • 硬链接:硬连接指通过索引节点来进行连接。在Linux的文件系统中,保存在磁盘分区中的文件不管是什么类型都给它分配⼀个编号,称为索引节点号(Inode Index)。在Linux中,多个文件名指向同⼀索引节点是存在的。⽐比如:A是B的硬链接(A和B都是文件名),则A的目录项中的inode节点号与B的目录项中的inode节点号相同,即⼀个inode节点对应两个不同的⽂文件名,两个文件名指向同一个⽂文件,A和B对⽂文件系统来说是完全平等的。删除其中任何一个都不不会影响另外一个的访问。
  • ln -h 源文件及路径 目标路径及文件名
    硬链接类似于Windows的副本
[root@yr /]#ln /root/install.log /h_install.log
[root@yr /]#ll *_install.log
-rw-r--r-- 2 root root  7 Jan 14 13:11 h_install.log    # 显示的是2
lrwxrwxrwx 1 root root 17 Jan 14 13:06 l_install.log -> /root/install.log
[root@yr /]#ls -li /*_install.log
9306855 -rw-r--r-- 2 root root  7 Jan 14 13:11 /h_install.log
  98313 lrwxrwxrwx 1 root root 17 Jan 14 13:06 /l_install.log -> /root/install.log
[root@yr /]#
[root@yr /]#ls -li /root/install.log
9306855 -rw-r--r-- 2 root root 7 Jan 14 13:11 /root/install.log    # 号已经对应上了

如果vi一个和源文件同名的文件,软连接会傻傻的连到名字跟源文件名字一样的文件上,而硬链接根据inode号会找到源文件
修改硬链接文件,源文件也随之改变,硬链接文件相当于隐分身。如果删除源文件,硬链接文件还存在,并且内容与源文件old相同,再创建一个和源文件old名字相同的文件new,软链接直接链接到new,而硬链接文件还链接在old上

7.3 软硬连接的区别:
  • 软链接是以路径的形式存在的,硬链接是以文件副本的形式存在
  • 软链接可以跨文件系统,硬链接不可以
  • 软链接可以对一个不存在的文件名进行链接(闪红色)
  • 软链接可以对目录进行链接,硬链接不允许给目录创建链接
  • 软链接是符号链接,硬链接是实体链接

8 磁盘分区

磁盘分区的两种方式:fdiskLVM

8.1 fdisk分区工具
  • 分区将一个硬盘驱动器分成若干个逻辑驱动器,分区是把硬盘连续的区块当作一个独立的磁盘使用。分区表是一个硬盘分区的索引,分区的信息都会写进分区表。
  • 每个硬件设备都映射到一个系统的文件。硬盘、光驱等IDE或SCSI设备也不例外。
  • 不同的接口链接进来的文件名不同。hd开头的是IDE设备(光驱);对于SDSI设备(硬盘SATA),分配由sd前缀组成的文件。
  • 为什么要分区:1)防止数据丢失。2)增加磁盘空间使用效率:可以用不同的区块大小来格式化分区。(如果给1K/次的程序分配10M,要读10240次,和系统交互浪费时间;如果文件都是1K,而硬盘4K,那么每存储一个文件都会浪费3K,浪费资源)3)数据激增到极限不会让系统挂起:将用户数据和系统数据分开,可以避免用户数据填满整个硬盘,引起系统挂起。

1.查看磁盘信息
1)fdisk -l

[root@yr /]#fdisk -l

Disk /dev/sda: 42.9 GB, 42949672960 bytes            # 再添加一块就是sdb、sdc、sdd
255 heads, 63 sectors/track, 5221 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
# 磁盘是42.9GB,有255个磁面,63代表一个磁面的扇区,9729个磁柱,每个cylinders的容量是8225280bytes(约为8M)
   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *           1          13      104391   83  Linux                  # 磁盘sda1被划分成了2块,分别是sda1和sda2
/dev/sda2              14        5221    41833260   8e  Linux LVM

Disk /dev/dm-0: 38.6 GB, 38621151232 bytes
255 heads, 63 sectors/track, 4695 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

Disk /dev/dm-0 doesn't contain a valid partition table

Disk /dev/dm-1: 4194 MB, 4194304000 bytes
255 heads, 63 sectors/track, 509 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

Disk /dev/dm-1 doesn't contain a valid partition table

2)/dev/sd* 也可以查询
但是没有fdisk -l显示的全。

2.fdisk对硬盘进行分区
fdisk 【磁盘名】
step1
在虚拟机里添加新磁盘后,再查看磁盘信息。

[root@yr ~]#fdisk -l
Disk /dev/sda: 42.9 GB, 42949672960 bytes
255 heads, 63 sectors/track, 5221 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *           1          13      104391   83  Linux
/dev/sda2              14        5221    41833260   8e  Linux LVM

Disk /dev/sdb: 21.4 GB, 21474836480 bytes        # 新添加的磁盘叫sdb
255 heads, 63 sectors/track, 2610 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

Disk /dev/sdb doesn't contain a valid partition table    # sdb还没有分区表

step2:
[root@yr ~]#fdisk /dev/sdb 使用fdisk命令

step3

Command (m for help): n                  # n新建一个分区
Command action
   e   extended                                    # 扩展
   p   primary partition (1-4)
p
Partition number (1-4): 1                  # 设定分区编号
First cylinder (1-2610, default 1): 1
Last cylinder or +size or +sizeM or +sizeK (1-2610, default 2610): size^H^H
Last cylinder or +size or +sizeM or +sizeK (1-2610, default 2610): 5GB
# +大小 设定大小(如果不写加号,就自动生成是到多少磁道)或者写到多少磁道

Command (m for help): P                  # p打印分区表

Disk /dev/sdb: 21.4 GB, 21474836480 bytes
255 heads, 63 sectors/track, 2610 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1               1           5       40131   83  Linux                             # 多了一个分区

Command (m for help): W                # w把分区写进分区表,保存并退出
The partition table has been altered!

Calling ioctl() to re-read partition table.
Syncing disks.
[root@yr ~]#fdisk -l                          # 再查看磁盘信息

Disk /dev/sda: 42.9 GB, 42949672960 bytes
255 heads, 63 sectors/track, 5221 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *           1          13      104391   83  Linux
/dev/sda2              14        5221    41833260   8e  Linux LVM

Disk /dev/sdb: 21.4 GB, 21474836480 bytes
255 heads, 63 sectors/track, 2610 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1               1           5       40131   83  Linux

命令:
p:打印分区表
n:新建一个分区
d:删除一个分区
q:退出不保存
w:把分区写进分区表,保存并退出

8.2 LVM(Logical Volume Manager)

可以动态扩展
LVM就是动态卷管理,可以将多个硬盘和硬盘分区做成一个逻辑卷,并把这个逻辑卷作为一个整体来统一管理,LVM对分区进行扩缩空间大小非常安全快捷而且方便管理。

在这里插入图片描述
1.四个概念

  • PV(physical volume)物理卷:一块物理磁盘被格式化为一个PV,PV是能被Linux接受的。
  • VG(Volume group)卷组
  • LV(logical volume)逻辑卷
  • PE(physical extend) 物理拓展

物理上是一个一个磁盘,然后通过Linux将它们放在一起,再通过逻辑分为逻辑卷,逻辑卷可以被任意的划分

在这里插入图片描述
2.流程
1)先将物理磁盘格式化,指定为PV,空间被划分为一个个的PE。
2)不同的PV加入到同一个VG,不同PV的PE全部进入到VG的PE池里。
不论磁盘是物理的还是逻辑的,他们都是PE
3)LV基于PE创建,大小为PE的整数倍(组成LV的PE可能来自不同的物理磁盘),现在的LV就可以直接格式化后挂在使用了。

3.通过LVM分区
step1:创建PV

[root@yr ~]#pvcreate /dev/sdc
  Physical volume "/dev/sdc" successfully created

step2:查看PV

[root@yr ~]#pvdisplay
  --- Physical volume ---
  PV Name               /dev/sda2            # 设备名
  VG Name               VolGroup00           # 这个PV逻辑卷所属的物理卷
  PV Size               39.90 GB / not usable 20.79 MB
  Allocatable           yes (but full)
  PE Size (KByte)       32768                 # 默认值
  Total PE              1276
  Free PE               0
  Allocated PE          1276
  PV UUID               t0tHsF-yL8M-THw1-bZas-5tIe-H4eb-cYrKrK
# UUID是物理卷设备的唯一编号
   
  "/dev/sdc" is a new physical volume of "10.00 GB"
  --- NEW Physical volume ---
  PV Name               /dev/sdc
  VG Name                             # 目前还没指定给哪一个VG使用,所以现在是空的
  PV Size               10.00 GB
  Allocatable           NO
  PE Size (KByte)       0
  Total PE              0
  Free PE               0
  Allocated PE          0
  PV UUID               rAYYMw-oz76-HTB3-qrVj-nyuy-ywJy-bRX4bI

step3:查看VG

[root@yr ~]#vgdisplay
  --- Volume group ---
  VG Name               VolGroup00                     # 目前只有一个VolGroup00
  System ID             
  Format                lvm2
  Metadata Areas        1
  Metadata Sequence No  3
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                2
  Open LV               2
  Max PV                0
  Cur PV                1
  Act PV                1
  VG Size               39.88 GB
  PE Size               32.00 MB
  Total PE              1276
  Alloc PE / Size       1276 / 39.88 GB
  Free  PE / Size       0 / 0   
  VG UUID               NwSZeh-WrqL-1UPz-4Kva-TgOm-ZrwL-onyl55

step4:创建新VG

[root@yr ~]#vgcreate vg_data /dev/sdc创建一个VG名为vg_data,pv_path是/dev/sdc

step5:查看已有的VG有哪些LV

[root@yr ~]#lvdisplay
  --- Logical volume ---
  LV Name                /dev/VolGroup00/LogVol00             # LV名字
  VG Name                VolGroup00                           # 这片蛋糕从哪里切的
  LV UUID                HTcMa4-Ugik-HeOP-VzCT-Ymuw-BNfV-tlR12v
  LV Write Access        read/write
  LV Status              available
  # open                 1
  LV Size                35.97 GB
  Current LE             1151
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           253:0
   
  --- Logical volume ---
  LV Name                /dev/VolGroup00/LogVol01
  VG Name                VolGroup00                                # 和上面的LV属于同一个VG
  LV UUID                AeUYgI-LrPY-2rF3-zhLD-Pumc-zagT-jbDPrc
  LV Write Access        read/write
  LV Status              available
  # open                 1
  LV Size                3.91 GB
  Current LE             125
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           253:1
  • 查看内存信息
[root@yr ~]#df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/mapper/VolGroup00-LogVol00                          # 根目录下的东西都是 LogVol00的
                       35G  2.4G   31G   8% /
/dev/sda1              99M   23M   71M  25% /boot
tmpfs                 995M     0  995M   0% /dev/shm
/dev/sr0              3.6G  3.6G     0 100% /media/OL5.7 x86_64 dvd 20110728

step6:创建新LV

[root@yr ~]#lvcreate -n lv_00 -L 2G vg_data                在vg_data这个VG里创建一个名为lv_00,大小为2G的LV
  Logical volume "lv_00" created
  • 查看LV信息
[root@yr ~]#lvdisplay
  --- Logical volume ---
  LV Name                /dev/vg_data/lv_00
  VG Name                vg_data
  LV UUID                h35oO9-2eWb-P8Th-6ON2-Ydsh-z31z-f1ddCS
  LV Write Access        read/write
  LV Status              available
  # open                 0
  LV Size                2.00 GB
  Current LE             512
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           253:2

删除是lvremove vgremove pvremove

[root@yr ~]#lvremove -f /dev/vg_data/lv_01
  Can't remove open logical volume "lv_01"
[root@yr ~]#umount /dev/vg_data/lv_01
[root@yr ~]#lvremove /dev/vg_data/lv_01
Do you really want to remove active logical volume lv_01? [y/n]: y
  Logical volume "lv_01" successfully removed
9 格式化

用来在特定的分区上建立Linux文件系统

mkfs.ext3 /dev/sdb1
# 或(写法不同,用法相同)
mkfs -t ext3 /dev/sdb1

mkfs -V -t 【文件系统】 【存储设备】
-V 显示详细信息
-t 指定文件系统类型,默认为ext2,还有ext3、nfs、xfs等
-c 在建立文件系统前,检查该分区是否有坏道

[root@yr ~]#mkfs -t ext3 /dev/vg_data/lv_00
mke2fs 1.39 (29-May-2006)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
262144 inodes, 524288 blocks
26214 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=536870912
16 block groups
32768 blocks per group, 32768 fragments per group
16384 inodes per group
Superblock backups stored on blocks:
        32768, 98304, 163840, 229376, 294912

Writing inode tables: done                            
Creating journal (16384 blocks): done
Writing superblocks and filesystem accounting information: done

This filesystem will be automatically checked every 24 mounts or
180 days, whichever comes first.  Use tune2fs -c or -i to override.
10 blkid用于显示块设备
  • blkid显示关于可用块设备的信息,可以识别一个块设备内同的类型(如文件系统、交换区)以及从内容的元数据(如卷标或UUID字段)中获取属性
  • 主要作用有两类:用指定的键值对搜索一个设备
[root@yr ~]#blkid
/dev/mapper/VolGroup00-LogVol01: TYPE="swap"
内存是40G,但根目录只占用了35G,说明剩下的这一部分空间作为虚拟内存使用了
/dev/mapper/VolGroup00-LogVol00: UUID="9c10d30b-b27e-404f-a706-1e3a389c0381" TYPE="ext3"这一部分空间被格式化后类型是ext3
/dev/sda1: LABEL="/boot" UUID="cd5502db-9423-4b09-ba86-58b32f9b6b29" TYPE="ext3"
/dev/VolGroup00/LogVol00: UUID="9c10d30b-b27e-404f-a706-1e3a389c0381" SEC_TYPE="ext2" TYPE="ext3"
/dev/VolGroup00/LogVol01: TYPE="swap"
/dev/mapper/vg_data-lv_00: UUID="1258f4aa-73eb-4cff-a3d6-aaae30e44886" SEC_TYPE="ext2" TYPE="ext3"

根目录是用LVM进行管理的,可以动态扩展,sda1是用fdisk分区来的,和LVM的区别在于无法再扩展了。一般都采用LVM这种方式进行磁盘划分和日后的管理

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值