(linux table)

(linux

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中根据规则换算出来,并且增加一项新的,在路由缓存中将项目添加进去。

Published by

风君子

独自遨游何稽首 揭天掀地慰生平