linux存储架构详解?
大部分的Linux文件系统(如ext2、ext3)规定,一个文件由目录项、inode和数据块组成:
目录项:包括文件名和inode节点号。
Inode:又称文件索引节点,包含文件的基础信息以及数据块的指针。
数据块:包含文件的具体内容。
一、目录块
Linux系统中,目录(directory)也是一种文件。打开目录,实际上就是打开目录文件。
目录文件的结构非常简单,就是一系列目录项(dirent)的列表。每个目录项,由两部分组成:所包含文件的文件名,以及该文件名对应的inode号码。
ls命令只列出目录文件中的所有文件名: ls /etc
ls -i命令列出整个目录文件,即文件名和inode号码: ls -i /etc
如果要查看文件的详细信息,就必须根据inode号码,访问inode节点,读取信息。ls -l命令列出文件的详细信息。 ls -l /etc
二、Inode
1、inode是什么
理解inode,要从文件储存说起。
文件存储在硬盘上,硬盘的最小存储单位叫做“扇区”(Sector)。每个扇区储存512字节(相当于0.5KB)。
操作系统读取硬盘的时候,不会一个个扇区的读取,这样效率太低,而是一次性连续读取多个扇区,即一次性读取一个“块”(block)。这种由多个扇区组成的“块”,是文件存取的最小单位。“块”的大小,最常见的是4KB,即连续八个sector组成一个block。
文件数据都储存在“块”中,那么很显然,我们还必须找到一个地方储存文件的“元信息”,比如文件的创建者、文件的创建日期、文件的大小等等。这种储存文件元信息的区域就叫做inode,中文译名为"索引节点"。
inode包含文件的元信息内容(除了文件名之外所有的文件信息)
文件的字节数。
文件类型。
文件拥有者的User ID。
文件的Group ID。
文件的读、写、执行权限。
文件的时间戳,共有三个:ctime指inode上一次变动的时间,mtime指文件内容上一次变动的时间,atime指文件上一次打开的时间。
链接数,即有多少文件名指向这个inode。
文件数据block的位置(数据块指针)。
2、inode的大小
inode也会消耗硬盘空间,所以硬盘格式化的时候,操作系统自动将硬盘分成两个区域。一个是数据区,存放文件数据;另一个是inode区(inode table),存放inode所包含的信息。
每个inode节点的大小,一般是128字节或256字节。inode节点的总数,在格式化时就给定,一般是每1KB或每2KB就设置一个inode。假定在一块1GB的硬盘中,每个inode节点的大小为128字节,每1KB就设置一个inode,那么inode table的大小就会达到128MB,占整块硬盘的12.8%。由于每个文件都必须有一个inode,因此有可能发生inode已经用光,但是硬盘还未存满的情况。这时,就无法在硬盘上创建新文件。
3、inode号码
每个inode都有一个号码,操作系统用inode号码来识别不同的文件。
这里值得重复一遍,Linux系统内部不使用文件名,而使用inode号码来识别文件。对于系统来说,文件名只是inode号码便于识别的别称或者绰号。表面上,用户通过文件名,打开文件。实际上,系统内部这个过程分成三步:首先,系统找到这个文件名对应的inode号码;其次,通过inode号码,获取inode信息;最后,根据inode信息,找到文件数据所在的block,读出数据。三、数据块
数据块就是在磁盘上存储数据的地方,使用文件的时候由操所系统索引inode来调用相应的文件
补充:创建一个新文件的操作
存储属性
内核先找到一个空闲的 i 节点(这里是131074 )
内核把文件信息记录到其中存储数据
该文件需要存储在三个磁盘块,内核找到了三个空闲块:300、500、800
将内核缓冲区的第一块数据复制到300,下一块复制到500,以此类推记录分配情况
文件内容按顺序 300、500、800存放,内核在 inode 上的磁盘分布区记录了上述块列表。
linux中dockers容器技术介绍?
linux中dockers容器技术其实就是管理熊雄起的引擎,是应用打包部署平台,可以为数据软件的应用提供基础。
什么是docker?
Docker就好比传统的货运集装箱
Docker是管理容器的引擎
Docker为应用打包 部署平台,而非单纯的虚拟化技术
SaaS(app,云盘,微店,网站) PaaS(redis,nysql,nginx)是基于Docker的云平台
VM VS Container

关于虚拟机
virsh 命令管理
virt_manager 图形化管理
libvirtd 一个管理接口
qemu-kvm(cpu/mem) 完全虚拟化
如果停掉libvirtd
systemctl stop libvirtd
1
1
管理化命令不能工作,但是虚拟机依然存在,依然工作
容器
容器和物理机共享内核和一些重要的文件系统
比虚拟机更小,更轻
传统虚拟机和容器技术对比

容器是如何工作的

创建一个容器

yum install wget -y
cd /etc/yum.repos.d/
wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
1
2
3
1
2
3

要解决依赖性
在阿里云平台下载
然后下载的包和rhel7.6 yum源里的包一起解决依赖性
yum install docker-ce container-selinux-2.77-1.el7.noarch.rpm -y
systemctl start docker
1
2
1
2
注意:docker启动前关闭防火墙和关闭selinux
docker info 查看容器信息
1
1
发现有两个警告
解决:
sysctl -a | grep bridge-nf-call-iptables
vim /etc/sysctl.d/bridge.conf
1
2
1
2
net.bridge.bridge-nf-call-iptables = 1
net.bridge.bridge-nf-call-ip6tables = 1
sysctl –system 生效
1
2
3
1
2
3
所有的容器数据都在/var/lib/docker里面

如果想要用普通用户做docker需要给这个文件给权限
yum install bash-* -y 为了table 补齐命令
1
1
用容器部署一个nginx服务
一般拉取太慢,设置一个加速器

cd /etc/docker/
vim daemon.json
systemctl daemon-reload
systemctl restart docker
1
2
3
4
1
2
3
4
docker search nginx 寻找镜像
docker pull nginx 拉取镜像(一般以服务名的是官方提供的)
docker run -d –name nginx nginx 部署容器
docker ps
1
2
3
4
1
2
3
4

docker inspect nginx 查看nginx容器信息
1
1

用ip addr show 命令查看桥接到docker0
yum install bridge-utils 桥接命令
brctl show
1
2
1
2

nginx部署成功

此时,nginx只能内部访问
如果需要外部访问,则删掉原nginx容器,用端口映射部署nginx
-d : 打入后台
-p 80:80 : 80映射80端口
docker run -d –name nginx -p 80:80 nginx
1
1
nginx history nginx:latest 查看nginx镜像信息
iptables -t nat -nL
1
2
1
2
访问本机转发到172.17.0.2:80上去

用ps ax 或 top 或 netstat -antlp 查看 docker就是个进程
网页访问虚拟机ip 可以看到nginx服务。
linux复表方法?
MySQL复制表数据到新表的几个步骤。
1.MySQL复制表结构及数据到新表
CREATE TABLE new_table SELECT * FROM old_table;
2.只复制表结构到新表
CREATE TABLE new_table SELECT * FROM old_table WHERE 1=2;(即:让WHERE条件不成立)
不复制列属性和索引。
低版本的mysql已经不支持,mysql4.0.25 不支持,mysql5及以上已经支持了。
3.根据其它表的定义(包括在原表中定义的所有的列属性和索引),使用LIKE创建一个空表:
CREATE TABLE new_table LIKE old_table;
不会复制对原表或外键定义指定的DATA DIRECTORY或INDEX DIRECTORY表选项。
4.复制旧表的数据到新表(假设两个表结构一样)
INSERT INTO new_table
SELECT * FROM old_table;
5.复制旧表的数据到新表(假设两个表结构不一样)
INSERT INTO new_table(字段1,字段2,…….)
SELECT 字段1,字段2,…… FROM old_table
linux路由表原理详解?
在计算机网络中,路由表(routing table)或称路由择域信息库(RIB, Routing Information Base),是一个存储在路由器或者联网计算机中的电子表格(文件)或类数据库。
路由表存储着指向特定网络地址的路径(在有些情况下,还记录有路径的路由度量值)。路由表中含有网络周边的拓扑信息。
路由表建立的主要目标是为了实现路由协议和静态路由选择
fib转发工作原理?
FIB从概念上讲类似于路由表或信息库。它维护着一个IP路由表中包含的转发信息的镜象。当网络中路由或拓朴结构发生了变化时,IP路由表就被更新,而这些变化也反映在FIB中。FIB基于IP路由表中信息,维护着下一网络段的地址信息。
Linux内核中采用了FIB(Forward Information Base)这个名词代替了Routing Database,原因不详。可能是不想和应用层的路由数据库发生概念上的冲突吧。但是Linux内核还是有一个叫做RouteTable的数据结构的,不过,它只是FIB的一份cache而已,其关系如同计算机中内存和CPU cache的关系。系统中路由一般采取的手段是:先到路由缓存中查找表项,如果能查找到,那么就直接将对应的一项取出作为路由的规则;如果查不到,那么就到FIB中根据规则换算出来,并且增加一项新的,在路由缓存中将项目添加进去。