shell(bash / dash)
终端仿真器/终端仿真程序
虚拟控制台tty1(桌面环境 gnome等) | tty2 | tty3 …
Linux kernel
分区(分区表,GPT等)
物理磁盘
Linux系统拥有很高的灵活性和自由度,系统启动后首先进入桌面环境(例如Ubuntu默认进入gnome,用户可更换其他桌面)或者tty(虚拟终端)。当进入桌面环境后可启动终端仿真器(用户可自行更换),终端仿真器会启动默认的shell(Ubuntu默认bash,用户可自行更换)。
BIOS+MBR/GPT
CMOS是记录各项硬件参数且嵌入在主板上的存储器,BIOS则是一个写入如到主板上的一个固件(所谓固件就是写入到硬件上的一个软件程序)。这个BIOS就是在开机的时候,电脑系统主动执行的第一个程序了。接下来,BIOS会分析电脑里有哪些存储设备,以硬盘为例,BIOS会取的能够开机的硬盘,并到该硬盘读取第一个扇区的MBR位置。MBR有446字节存储引导程序,BIOS将该程序加载到内存,然后跳转到该程序执行。该程序会做相关工作。
每个分区都有自己的boot sector,可以负责启动自己的内核
UEFI(Unified Extensible Firmware Interface) BIOS+GPT
UEFI必须格式化一个vfat的文件系统,大约512MB~1GB。
linux支持多种文件系统
Linux文件系统的演进
ext文件系统
Linux最初的文件系统,限制较多,比如文件大小不能超过2G等
ext2文件系统
ext的升级。容易在系统崩溃或断电时损坏。
ext3文件系统
ext2的后续演进,支持最大2TB的文件,能够管理32TB大小的分区。默认采用有序式的日志方法,没有提供数据压缩功能
ext4文件系统
ext3的后续版本。最大支持16TB的文件,能够管理1EB大小的分区。默认采用有序日志方式。
JFS文件系统
一种比较老旧的文件系统
ZFS文件系统
一个稳定的文件系统,与Resier4、Btrfs和ext4势均力敌,拥有数据完整性验证和自动修复功能,最大支持16EB的文件,能能够管理256万亿ZB的存储空间。
XFS文件系统
日志式文件系统,适合高容量高能效的场景。几乎涵盖了ext4文件系统的所有功能
xfs_info /dev/sda1
# 将系统内的所有档案格式及名称都列出来
df -aT
NTFS文件系统
windows系统默认文件系统
fat文件系统
单个文件传输不能超过4G
exfat文件系统
Windows U盘文件系统的改进,取消了单个文件不超4G的限制
inode与block在格式化时会固定大小及数量
索引式文件系统,如ext2/3/4

FAT文件系统没有 inode

ext2文件系统的实现
将inode,block分组

superblock
记录整个文件系统相关信息。只在第一个组有,其他组或许有备份
文件系统描述说明
描述每个block group的首尾block号码,以及每个区段(superblock, bitmap, inodemap, data block)分别介于哪个block号码之间
block bitmap 区域对照表
记录block是否为空
inode bitmap
记录inode是否为空
inode 表格
inode记录文件的属性信息以及该文件在哪些block内
inode指向block的层级结构

dumpe2fs 命令查看文件系统相关信息
dumpe2fs [-bh] 设备名
-b:列出保留为坏道的部分
-h:仅列出superblock的信息
blkid # 查看当前已经格式化的设备
文件与目录在OS中显示的占用与磁盘占用
目录:文件系统会分配一个inode与至少一个block给该目录
因此当用ls -l查看时目录总是block大小的整数倍数,不包含该目录的inode占用
文件:ls -l查看的是实际文件大小
文件的实际磁盘占用需要加上inode(256B/128B)加上n个block,根据文件大小可能会有用于记录block号码的block
查看Linux支持的文件系统
ls -l /lib/modules/$(uname -r)/kernel/fs
查看Linux系统当前支持的文件系统
cat /proc/filesystems
Linux VFS(Virtual filesystem switch)

硬链接
硬链接:在某个目录的block下多写入个名称和inode号
限制:1.不能跨文件系统。2.不能硬链接目录
软连接
建立一个inode与block,block的内容为连接的位置名称
mount
[root@study ~]# mount -a
[root@study ~]# mount [-l]
[root@study ~]# mount [-t 文件系统] LABEL='' 挂载点
[root@study ~]# mount [-t 文件系统] UUID='' 挂载点
[root@study ~]# mount [-t 文件系统] 设备名 挂载点
选项参数:
-a :按照设定档 /etc/fstab 的资料将所有未挂载的磁碟都挂载上来
-l :单纯的输入 mount 会显示目前挂载的信息。加上 -l 可增列 Label 名!
-t :可以加上文件系统种类来指定想挂载的类型。常见的 Linux 支持类型有:xfs, ext3, ext4,
reiserfs, vfat, iso9660(光碟格式), nfs, cifs, smbfs (后三种为网络文件系统类型)
-n :在预设的情況下,系统会将实际挂载的情况即时写入 /etc/mtab 中,以利其他程序的运行。
但在某些情況下(例如单人维护模式)为了避免问题会刻意不写入。此时就得要使用 -n 选項。
-o :后面可以接一些挂载时额外加上的参数!比如账号、密码、读写权限等:
async, sync: 此文件系统是否使用同步写入 (sync) 或非同步 (async) 的
存储机制,请参考文件系统的运行方式。预设为 async。
atime,noatime: 是否修订文件系统的读取时间(atime)。为了效能,某些时刻可使用 noatime
ro, rw: 挂载文件系统成为只读(ro) 或可读写(rw)
auto, noauto: 允许此 filesystem 被以 mount -a 自动挂载(auto)
dev, nodev: 是否允许此 filesystem 上,可建立设备文件? dev 为可允许
suid, nosuid: 是否允许此 filesystem 含有 suid/sgid 的文件格式?
exec, noexec: 是否允许此 filesystem 上拥有可执行 binary 文件?
user, nouser: 是否允许此 filesystem 让任何使用者执行 mount ?一般來说,
mount 仅有 root 可以执行,但下达 user 参数,则可让
一般 user 也能够对此 partition 进行 mount 。
defaults: 预设值为:rw, suid, dev, exec, auto, nouser, and async
remount: 重新挂载,这在系统出错,或重新更新参数时,很有用!
# 从新挂载 / ,并加入参数 rw与auto
mount -o remount,rw,auto /
内存文件系统的iNode=1
root目录的iNode=2
mount -t tmpfs -o size=32M tmpfs /mnt/tmpfs/
ls -id /mnt/tmpfs/
ls -id /
Linux已经载入的文件系统类型
cat /proc/filesystems
ext4修改partition的label tune2fs -L new_label /dev/vda5
磁盘/文件系统参数
| 设备文件 | Major | Minor |
|---|---|---|
| /dev/sda | 8 | 0-15 |
| /dev/sdb | 8 | 16-31 |
| /dev/loop0 | 7 | 0 |
| /dev/loop1 | 7 | 1 |
分区管理工具:
partprobe -s使之生效parted devicename print # 查看硬盘信息
硬盘设备名称分配格式:
将数据存储到分区之前,必须使用某种文件系统对其进行格式化,以便Linux能够使用分区。
mkfs # 复合指令,mkfs.ext4 / mkfs.xfs partition
mkfs -t filesystemtype partition
为分区创建好文件系统之后,是将其挂载到虚拟目录中的某个挂载点,以便在新分区中存储数据
mkdir /home/part
# 临时挂载分区。要在Linux启动时挂载需要添加在/etc/fstab文件中
sudo mount -t ext4 /dev/sdb1 /home/part
lsblk -f /dev/sdb
cat /etc/fstab # filesystem table
[设备/UUDI/LABEL] [挂载点] [文件系统] [文件系统参数] [dump(备份指令)] [fsck(校验)]
#
# / was on /dev/sda2 during installation
UUID=074d9 / ext4 errors=remount-ro 0 1
UUID=e0fa /data/xfs xfs defaults 0 0
/etc/fstab是开机是的设置文档,实际文件系统的挂载是记录到/etc/mtab与/proc/mounts这两个文件中的。每次在更改文件系统的挂载时,也会同时更改这两个文件。在单人模式中通过下面的指令重新挂载根目录为可读写,更新fstab
mount -n -o remount,rw /
fsck options filesystem
LVM(Logical Volume Manager)和文件管理系统时关于存储管理的两个不同的概念和技术。
LVM是一种逻辑卷卷管理技术,用于管理磁盘驱动器和存储设备,它实现了在物理存储设备上创建逻辑卷,并将它们合并成一个虚拟组卷组的功能。LVM可以在运行时动态地调整逻辑卷的大小,提供更高的灵活性和可扩展性,以满足存储需求的变化。
文件管理系统是用于组织和管理计算机体系中的文件的软件或子系统。它涵盖了对文件的创建、存储、访问、修改和删除等操作。文件管理系统负责将文件存储在物理存储设备上,并提供对文件的访问和保护等功能。
LVM和文件管理系统之间的联系在于,LVM可以为文件管理系统提供灵活的存储管理解决方案。通过使用LVM,文件管理系统可以更加灵活地管理磁盘空间,轻松地扩展或缩小文件系统的大小,而无需重新分区或复制数据。
当文件管理系统需要增加存储空间时,LVM可以添加新的物理卷(例如硬盘或磁盘分区)到现有的卷组中,然后将该卷组扩展到新的物理卷组上。这使得文件系统可以继续在增加的空间上存储文件,并无需重新安装操作系统。
总的来所,LVM为文件管理系统提供了更高的灵活性和可用性,使得存储空间管理更加方便和可靠。它们共同为计算机系统中的文件管理提供了更好的性能和扩展性。
LVM允许将多个分区组合在一起,作为单个分区(逻辑卷)进行格式化、在Linux虚拟目录结构上挂载、存储数据等。
假设有个映像文件xxx.iso
如何查看?可以读写iso的内容
mount -o loop /tmp/xxx.iso /data/iso_dvd
dd if=/dev/zero of=~/loopdev bs=1M count=512
# if: input file,输入文件,/dev/zero会一直输出0
# of: output file, 将输入写入到后面的文件中
# bs: 每个block大小
# count: block的个数
mkfs.xfs -f ~/loopdev
blkid ~/loopdev
建立swap
也可以用loop设备建立swap
# 先执行第一个命令然后执行第二个命令
cd ~;ls
# 当第一命令成功执行后再执行第二个命令
cd ~ && ls
variable=value #等号两边不能有空格
shell对空格的支持并不友好,在遇到空格时需要用转义字符()或将其用引号包含
将命令的输出结果赋给变量
# 用反引号将命令括起来
testing=`date` # 创建子进程运行date命令
testing=$(date)
today=20$(date +%y%m%d) # 同上,创建子进程运行date命令
echo container > log.$today 2$>1
http://ftp.twaren.net/
http://ftp.ksu.edu.tw/
linux.vbird.org