一、fdisk命令
该命令是管理c盘的分区,无论是创建与销毁,在生产环境中使用该命令是非常危险的,所以要慎重而行。
1、查看磁盘的分区信息:
fdisk -l [-u] [device...]:列出指定磁盘设备上的分区情况;
2、管理分区
fdisk device
fdisk提供了一个交互式接口来管理分区,它有许多子命令,分别用于不同的管理功能;所有的操作均在内存中完成,没有直接同步到磁盘;直接使用w命令保存至磁盘上;
常用命令:
n:创建新分区;
d:删除已有分区;
t:修改已有分区;
l:查看所有已知ID;
w:保存并退出;
q:不保存并退出;
m:查看帮助信息;
p:显示现有分区信息;
我们如今查看一下该系统下的c盘空闲空间。
# fdisk -l /dev/sda
Disk /dev/sda: 128.8 GB, 128849018880 bytes, 251658240 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0x000e681d
Device Boot Start End Blocks Id System
/dev/sda1 * 2048 821247 409600 83 Linux
/dev/sda2 821248 126650367 62914560 83 Linux
/dev/sda3 126650368 168593407 20971520 83 Linux
/dev/sda4 168593408 251658239 41532416 5 Extended
/dev/sda5 168595456 170692607 1048576 82 Linux swap / Solaris
我们看见,要想创建新的分区,只能从扩充分区中开始创建逻辑分区,我们如今开始界定一个分区。
# fdisk /dev/sda
Welcome to fdisk (util-linux 2.23.2).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.
Command (m for help):
这么以上大致的提示为,你的操作还会保留在显存中,直到你决定写入该c盘linux磁盘相关命令,做这些操作时请三思。我们可以按m键可以帮助我们查看fdisk的功能子命令的描述以及用法等。这么常用的命令就在里面显示着,所以在这儿不多做描述,现今我们按n键新建一个分区。
Command (m for help): n
All primary partitions are in use
Adding logical partition 6
First sector (170694656-251658239, default 170694656):
因为一开始早已界定了主分区,所以并没有让我们指定主分c盘号,而是手动创建逻辑分区c盘号6,我们直接默认就可以,假如指定的话,会有不连续的空间。
First sector (170694656-251658239, default 170694656):
Using default value 170694656
Last sector, +sectors or +size{K,M,G} (170694656-251658239, default 251658239):
在这儿我们可以指定空间大小,一种可以根据磁道来分,不过磁道分配比较不便捷;另一种根据大小来分,我们来根据大小来分2G空间。
Last sector, +sectors or +size{K,M,G} (170694656-251658239, default 251658239): +2G
Partition 6 of type Linux and of size 2 GiB is set
分配完成以后,我们可以按p键来进行查看。
Command (m for help): p
Disk /dev/sda: 128.8 GB, 128849018880 bytes, 251658240 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0x000e681d
Device Boot Start End Blocks Id System
/dev/sda1 * 2048 821247 409600 83 Linux
/dev/sda2 821248 126650367 62914560 83 Linux
/dev/sda3 126650368 168593407 20971520 83 Linux
/dev/sda4 168593408 251658239 41532416 5 Extended
/dev/sda5 168595456 170692607 1048576 82 Linux swap / Solaris
/dev/sda6 170694656 174888959 2097152 83 Linux
然后我们按w键来进行保存并退出,不过会有一个提示:
Command (m for help): w
The partition table has been altered!
Calling ioctl() to re-read partition table.
WARNING: Re-reading the partition table failed with error 16: Device or resource busy.
The kernel still uses the old table. The new table will be used at
the next reboot or after you run partprobe(8) or kpartx(8)
Syncing disks.
我们查看一下/dev/sda6是否存在。
# fdisk -l /dev/sda
Disk /dev/sda: 128.8 GB, 128849018880 bytes, 251658240 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0x000e681d
Device Boot Start End Blocks Id System
/dev/sda1 * 2048 821247 409600 83 Linux
/dev/sda2 821248 126650367 62914560 83 Linux
/dev/sda3 126650368 168593407 20971520 83 Linux
/dev/sda4 168593408 251658239 41532416 5 Extended
/dev/sda5 168595456 170692607 1048576 82 Linux swap / Solaris
/dev/sda6 170694656 174888959 2097152 83 Linux
从该命令中可以看出,确实是存在的,但只是这个命令当中存在,并不代表该分区就存在,硬件的管理都要靠的是内核,我们查看一下/proc/partitions
# cat /proc/partitions
major minor #blocks name
8 0 125829120 sda
8 1 409600 sda1
8 2 62914560 sda2
8 3 20971520 sda3
8 4 1 sda4
8 5 1048576 sda5
11 0 8491008 sr0
这个文件保存着的内核所辨识到的所有分区,因为没有保存sda6的分区,所以没有被内核没有进行辨识。须要注意的是:在已有分区而且挂载其中某个分区c盘设备上创建新分区,内核可能在创建完成以后难以直接辨识;此时我们可以强制内核重新辨识该分区,具体操作总结如下:
查看:# cat /proc/partitions
通知内核强制重读磁盘分区列表:
CentOS 5:partprobe [device]
CentOS 6, 7:partx, kpartx
partx -a [device]
kpartx -af [device]
分区创建工具:parted, sfdisk;
须要注意的是,假如一次通知内核不成的话,多试几次就可以。
# partx -a /dev/sda
partx: /dev/sda: error adding partitions 1-5
# partx -a /dev/sda
partx: /dev/sda: error adding partitions 1-6
查看/proc/partitions文件,只有出现sda6的分区能够开始进行之后的相关操作。
# cat /proc/partitions
major minor #blocks name
8 0 125829120 sda
8 1 409600 sda1
8 2 62914560 sda2
8 3 20971520 sda3
8 4 1 sda4
8 5 1048576 sda5
8 6 2097152 sda6
11 0 8491008 sr0
二、创建文件系统
以上我们界定完分区以后,还不能直接使用,必须给该分区创建文件系统才才能可以使用,这使用的是低格操作,这么低格一般分为两种,一种是低级低格,这个是由厂商来做,分区之前进行,拿来界定扇区的一种手段;另一种为中级低格,是由用户来进行操作,将c盘分区以后对该分区来创建文件系统的一种手段。这么所谓中级低格或则说创建文件系统的过程就是在这一段空间里,切割下来一部份空间作为元数据区域,而以后的空间界定为数据区域。元数据中主要储存的是文件的大小、权限等,并且并不包含文件名,由于该文件名是目录中储存。每一个文件属性的元数据储存几乎是一样的,所以说拿来储存元数据固定的空间,就称作索引节点号。
元数据区,数据区;
元数据区:
文件元数据:inode(index node)
大小、权限、属主属组、时间戳、数据块指针(但不存放名称,名称在目录中存放)
而在数据区域中,我们要界定好多的块来进行储存数据,文件的大小可以基于该空间中分配的块来进行储存,它是最小分配单元,只能属于一个文件。
总结:
在一块磁盘中,分为元数据区域和数据区域,数据区域要划分成为数据块(Data Block),元数据区域存储的是inode,inode要不断的从里面数据指针标明一个文件来标识占据了那些磁盘块。
2.1特殊文件
特殊文件通常指的是符号链接文件和设备文件,特殊的不同之处在那里?链接文件特殊在于inode中原本是指向的为c盘块,但并没有指向该c盘块,而是指向的是另一个文件的访问路径,而设备文件的特殊之处在于inode储存的数据表针的空间当中,储存的是主设备号和次设备号。
符号链接文件:存储数据指针的空间当中存储的是真是文件的访问路径;
设备文件:存储数据指针的空间当中存储的是设备号(major, minor);
以上这种特殊文件,虽然并没有抢占数据空间中的数据块,因而作为特殊归类。
三、文件系统
我们的c盘块和inode也是要使用索引的,由于这样的话不用全盘扫描c盘块是否用到,我们可以筹建一个索引区域,专门储存这个c盘块的索引,每一个都是对位索引,比如:第一个c盘块就抢占着这个区域里的第一位的空间,所以说我们可以用0标示该对应的c盘块是空闲中,用1标示该c盘块早已使用中。我们称之为位图索引(bitmapindex)。之后就可以直接扫描位图索引中的标示位即可。
bitmap index:位图索引(在存储空间中建立一个存储区域,专门存放一个索引区域,由二进制存储与块之对应,0表示空闲,1表示占用)
然而,虽然这么,管理上去仍有不便的地方,如今的文件系统并不是直接界定成元数据和数据区域,而是在这个基础上,内部里又界定了二级结构,首先领到c盘空间以后linux磁盘相关命令,该空间就被界定成了一个又一个独立的逻辑单位,其主要作用就是储存c盘块,把c盘块进行分组,称之为块组硬盘安装linux,每一个独立的c盘块组都可以拥有一个元数据区域,假如该c盘块组不够用,我们可以使用其它组的块空间进行使用,由于这显然是逻辑界定。彼此之间进行协调,充分借助,并且也要进行管理,要有一个统一性,所以须要有一个空间来进行标注该空间内有多少个块组,抢占了多大的空间等,都要进行一系列的统计arm linux,而这个对于c盘分区来讲,称之为超级块。超级块记录了每位块组从哪个块组开始到哪个块组结束,共有多少个块组,假如超级块遭到毁坏,则整个的逻辑结构还会倒塌,所以至关重要,要进行备份冗余。超级块会放在某一个块组当中进行储存。这么我们总结一下:虽然元数据和数据也是一样的,我们要将整个的c盘空间界定许多的块,这儿的块中来分辨谁是元数据谁是数据,块组也是一样的道理,有些块拿来储存元数据,有些拿来储存数据,只不过在诸多的块之中,有些块是超级块;不过,不仅超级块之外,还有一个为块组描述符,只是拿来管理该块组,而超级块是拿来管理所有块组。
块组描述符记录着从哪个块开始到哪个块结束,同时,它也得向其他组描述,在它的空间中有多少inode,也有多少个数据块(Datablock),每一个inode记录着这些已用,这些未用,还要有位图索引,而位图索引虽然是单块组实现的,每一个inode都有inode编号,无论是文件还是目录都有该编号。刚刚之前也说过,文件名并不是在元数据区域储存,而是在目录上储存,而目录也是一个文件,如果找/var/log/message文件的路径映射为:先去找到根的inode,通过数据表针指向自己的c盘块,该c盘块放置的是该目录的目录或文件名和对应inode之间的关系,通过该c盘块找到了var目录的名子以及与之对应的inode,然后按照inode编号去查inode元数据表,找到了var相关的inode所指向的c盘块,这个c盘块也是放置的目录和文件名与之对应的inode,然后我们就找到了log这个名子,也找到了inode编号,之后去指向log数据块,这儿的数据块也储存了目录或文件名和与之对应inode,找到message这个名子于inode号进行查找,然后就找到了message文件所属的数据块。
不过这样也是一件很麻烦的事情,所以可以将元数据和数据进行一个缓存放置在显存中,推进其访问速率。这么有了以上这简单的概念以后,我们来描述一下Linux所支持的文件系统。Linux的文件系统有好多种,不同的文件系统意味着无论是界定元数据还是查找的形式等,各自结构也是不同的,每一种文件系统的管理方法也是不同的,比如EXT4和xfs文件系统的访问插口是不一样的,所以为了统一插口,引用了VFS机制,简单来说,当两个层次有衔接时,加上一个中间层,向下提供统一而又简约的插口。
VFS:Virtual File System
Linux文件系统:ext2(无日志功能), ext3, ext4, xfs, reiserfs, btfs
光盘:iso9660
网络文件系统:nfs, cifs
集群文件系统:gfs2, ocfs2
内核级分布式文件系统:ceph
Windows的文件系统:vfat, ntfs
伪文件系统:proc, sysfs, tmpfs, hugepagefs
Unix的文件系统:UFS, FFS, JFS
交换文件系统:swap
用户空间的交换式文件系统:mogilefs, moosefs, glusterfs
这么怎样管理文件系统,虽然管理无非就是创建、删除等操作,而创建文件系统虽然就是低格某一个c盘去创建该文件系统。
文件系统管理工具:
创建文件系统的管理工具:
mkfs
mkfs.ext2, mkfs,ext3, mkfs.ext4, mkfs.xfs, mkfs.vfat, ...
检测及修复文件系统的工具:
fsck
fsck.ext2, fsck.ext3, ...
查看其属性的工具:
dumpe2fs, tune2fs
调整文件系统的特性:
tune2fs
3.1日志
文件系统可大致分类两类,一种是无日志系统,还有一个是有日志的系统,在c盘空间中找出一段空间作为日志区。诸如,创建一个文件并不是在元数据区和数据区创建,而是在日志空间中创建,假如成功在放在元数据区域和数据区域,假如失败则就在日志系统中进行查看该日志文件,不用进行全盘扫描该空间所形成的问题。不过也有它的劣势,那就是性能的问题,如今日志空间中写一次就能讲到该空间中,好在现今的日志系统也是悉心设计,这些性能的损伤也是可以忽视不计,它的优势是小于劣势的。
3.2链接文件
链接文件或许分为两种,它是一个访问同文件实现不同的路径而已。共分为两类:
链接文件:访问同一个文件的不同路径;
硬链接:指向同一个inode的多个文件路径;
特性:
(1) 目录不支持硬连接;
(2) 硬链接不能跨文件系统;
(3) 创建硬链接会增加inode引用计数;
创建:
ln src link_file
符号链接:指向一个文件路径中的另一个文件路径;
特性:
(1) 符号链接与原文件是两个各自独立的文件,各有自己的inode;对原文件创建符号链接不会增加引用技术;
(2) 支持对目录创建符号链接,可以跨文件系统;
(3) 删除符号链接文件不影响原文件;但删除原文件,符号指定的路径即不存在,此时会变成无效链接;
注意:符号链接文件的大小是其指向该文件的路径的字符串的字节数;
创建:
ln -s src link_file
-v:verbose