zoukankan      html  css  js  c++  java
  • 04linux系统基础-文件的基本管理和XFS文件系统备份恢复

    1.1Linux系统目录结构和相对/绝对路径

    1.1.1系统目录结构

    在win系统中,查看文件先进入相应的盘符,然后进入文件目录

    在win中他有很多的根,c:  d: e:等等

    linux只有一个根目录

    使用tree命令查看目录结构,这个命令默认是没有安装的,需要手工安装以下

    [root@localhost /]# yum -y install tree 

    [root@localhost /]# tree /tmp/
    /tmp/
    ├── ks-script-k2lZct
    ├── mysql.sock
    ├── pear
    │   └── temp
    ├── systemd-private-401dd10f357e4b7abfd40b3b90b06735-chronyd.service-rqRe2h
    │   └── tmp
    ├── systemd-private-e4898ad4af854a429d672800b4b85e5c-chronyd.service-9sxu7v
    │   └── tmp
    └── yum.log

    根下目录作用说明:

    目 录

    说 明

    /

    处于linux系统树形结构的最顶端,它是linux文件系统的入口,所有的目录、文件、设备都在 / 之下

    /bin

    bin是Binary的缩写。常用的二进制命令目录。比如 ls、cp、mkdir、cut等;和/usr/bin类似,一些用户级gnu工具

    /boot

    存放的系统启动相关的文件,例如:kernel.grub(引导装载程序)

    /dev

    dev是Device的缩写。设备文件目录,比如声卡、磁盘……在Linux中

    一切都被看做文件。终端设备、磁盘等等都被看做文件

    设备文件: /dev/sda,/dev/sda1,/dev/tty1,/dev/tty2,/dev/pts/1, /dev/zero, /dev/null, /dev/cdrom

    /etc

    常用系统及二进制安装包配置文件默认路径和服务器启动命令目录

    passwd 用户信息文件

    shadow  用户密码文件

    group 存储用户组信息

    fstab 系统开机启动自动挂载分区列表

    hosts 设定用户自己的IP与主机名对应的信息

    /home

    普通用户的家目录默认存放目录

    /lib

    库文件存放目录,函数库目录

    /lost+found

    只在centos6中有

    默认为空,被FSCK(file system check用来检查和维护不一致的文件系统。若系统掉电或磁盘发生问题,可利用fsck命令对文件系统进行检查)用来放置零散文件(没有名称的文件) 当系统非法关机后,这里就会存放一些文件。

    在centos6版本下,每个分区的挂载点下会有些目录

    /mnt

    /media

    一般用来临时挂载存储设备的挂载目录,比如有cdrom、U盘等目录

    在CENTOS7中会挂载到/run下面

    /opt

    表示的是可选择的意思,有些软件包也会被安装在这里 

    /proc

    操作系统运行时,进程(正在运行中的程序)信息及内核信息(比如cpu、硬盘分区、内存信息等)存放在这里。/proc目录是伪装的文件系统proc的挂载目录,proc并不是真正的文件系统。因此,这个目录是一个虚拟的目录,它是系统内存的映射,我们可以通过直接访问这个目录来获取系统信息。也就是说,这个目录的内容不在硬盘上而是在内存里

    查看咱们的CPU信息 

    cat /proc/cpuinfo

    /sys

    系统目录,存放硬件信息的相关文件

    /run

    运行目录,存放的是系统运行时的数据,比如进程的PID文件

    /srv

    服务目录,存放的是我们本地服务的相关文件

    /sbin

    大多数涉及系统管理的命令都存放在该目录中,它是超级权限用户root的可执行命令存放地,普通用户无权限执行这个目录下的命令,凡是目录sbin中包含的命令都是root权限才能执行的  

    /tmp

    该目录用于存放临时文件,有时用户运行程序的时候,会产生一些临时文件。/tmp就是用来存放临时文件的。/var/tmp目录和该目录的作用是相似的,不能存放重要数据,它的权限比较特殊

    [root@localhost63 ~]# ls ld /tmp

    drwxrwxrwt 10 root root 12288 Oct 3 20:45 /tmp/ à粘滞位(sticky bit)目录的sticky位表示这个目录里的文件只能被owner和root删除

    /var

    系统运行和软件运行时产生的日志信息,该目录的内容是经常变动的,存放的是一些变化的文件。比如/var下有/var/log目录用来存放系统日志的目录,还有mail、/var/spool/cron   

    /usr

    存放应用程序和文件,
    /usr/bin 普通用户使用的应用程序
    /usr/sbin 管理员使用的应用程序
    /usr/lib 库文件Glibc(32位)
    /usr/lib64 库文件Glibc

    /lib

    /lib64

    都在/usr/目录下

    这个目录里存放着系统最基本的动态链接共享库,包含许多被/bin/和/sbin/中的程序使用的库文件,目录/usr/lib/中含有更多用于用户程序的库文件。作用类似于windows里的DLL文件,几乎所有的应用程序都需要用到这些共享库

    注:lib***.a是静态库
         lib***.so是动态库

    静态库在编译时被加载到二进制文件中
    动态库在运行时加载到进程的内存空间中

    简单的说:这些库是为了让你的程序能够正常编译运行的

    其实类似于WIN中.dll文件,几乎所有的应用程序都需要用到这些共享库

    1.1.2  绝对路径和相对路径

    路径:在我们平时使用计算机时要找到需要的文件就必须知道文件的位置,而表示文件的位置的方式就是路径

    绝对路径:Linux中,绝对路径是从”/”开始的,比如/usr、/etc/passwd。如果一个路径是从根(/)开始的,它一定是绝对路径.

    相对路径:相对路径是以 . 或 .. 开始的,

     [root@localhost63 etc]# pwd  #判断用户当前所处的位置

    绝对路径: /开始的路径  /home/mk

    相对路径: 相对于当前目录开始,a.txt  ./a.txt  ../miao/b.txt   当前目录在/etc

    [root@localhost ~]# cd /etc/

    [root@localhost etc]# ll passwd

    -rw-r--r-- 1 root root 2116 11月 16 14:57 passwd

    [root@localhost etc]# ll /etc/passwd

    -rw-r--r-- 1 root root 2116 11月 16 14:57 /etc/passwd

    1.2  文件的管理

    文件管理方式有多种:

    改变目录: cd

    创建/修改/移动/删除: touch   mkdir    mv  vi   rm  cp

     

    1.2.1 创建文件和文件夹

    命令之:touch 

    作用:常用来创建空文件,如果文件存在,则修改这个文件的时间

    补充:文件的三种时间

    [root@localhost ~]# ll /etc/passwd  #查看文件修改的时间

    -rw-r--r-- 1 root root 2116 11月 16 14:57 /etc/passwd

    [root@localhost ~]# stat /etc/passwd  #查看文件属性(其中包括文件时间属性)

      文件:"/etc/passwd"

      大小:2116      块:8          IO 块:4096   普通文件

    设备:803h/2051dInode:9401663     硬链接:1

    权限:(0644/-rw-r--r--)  Uid:(    0/    root)   Gid:(    0/    root)

    最近访问:2017-11-16 14:57:39.923177258 +0800

    最近更改:2017-11-16 14:57:39.397177256 +0800

    最近改动:2017-11-16 14:57:39.409177256 +0800

    注:

    访问时间:atime  查看内容   cat  a.txt

    修改时间:mtime  修改内容  vim a.txt

    改变时间:ctime  文件属性,比如权限  change time。  chmod +x a.sh

    语法:touch 文件名

    [root@localhost ~]# cd /opt/

    [root@localhost opt]# touch a.txt

    [root@localhost opt]# touch file1 file2

    [root@localhost opt]# touch file{6..20}  #创建file6到file20的文件

    [root@localhost opt]# ls

    a.txt  file10  file12  file14  file16  file18  file2   file6  file8  rh

    file1  file11  file13  file15  file17  file19  file20  file7  file9

    [root@localhost opt]#  touch -d "20181019 21:30" localhost.txt

    [root@localhost opt]# ll localhost.txt

    -rw-r--r-- 1 root root 0 10月 19 2018 localhost.txt

    1.2.2  使用vim和重定向创建一个新文件

    vim命令创建一个新文件

    [root@localhost mnt]# vim localhost-1.txt

    用重定向创建一新文件

    [root@localhost mnt]#echo  aaa > localhost.txt

     

    1.2.2  命令之:mkdir

    作用:创建目录

    语法:mkdir  (选项) 文件名

    例:

    [root@localhost opt]# mkdir dir1

    [root@localhost opt]# mkdir dir2 dir3 /home/dir4

    [root@localhost63 opt]# ls /home/

    dir4  mk

    [root@localhost63 opt]# mkdir /tmp/a/b/c

    mkdir: 无法创建目录"/tmp/a/b/c": 没有那个文件或目录

    [root@localhost63 opt]# mkdir -p /tmp/a/b/c  #在创建一个目录的时候,如果这个目录的上一级不存在的话,要加参数-p

    [root@localhost63 opt]# ls /tmp/a/b/

    c

     

    1.2.2  删除文件和目录

    用到的命令:rm

    作用:可以删除一个目录中的一个或多个文件或目录,对于链接文件,只是删除整个链接文件,而原文件保持不变的

    语法:rm (选项) 处理对象

    选项:

    -f  强制删除,没有提示

    -r  删除目录

    例子:

    [root@localhost63 opt]# rm -rf a.txt

    [root@localhost63 opt]# rm -rf a.txt dir

    [root@localhost63 opt]# rm -rf file*

    rm -rf  (慎用,一定要在删除以前确定一下所在目录,防止误删除重要数据)

     

    1.2.3 复制文件

    命令:cp  源文件/目录   目录文件/目录

    选项:-R/r:递归处理,将指定目录下的所有文件与子目录一并处理

    例子:

    [root@localhost63 ~]# cp /etc/passwd /opt/   #复制文件

    [root@localhost63 ~]# cp -r /boot/grub /opt/  #复制目录

    1.2.4 移动文件

    [root@localhost63 opt]# mv passwd  dir1

    [root@localhost63 opt]# mv localhost.txt dir1/a.txt   #在移动文件的时候支持改名操作

     

    1.3  查看文件

    1.3.1 命令之:cat

    语法:cat 文件名

    作用:查看文件内容,一次显示整个文件的内容

    例子: [root@localhost63 ~]# cat /etc/passwd 

    1.3.2 命令之:more

    作用:以分页形式显示文件内容

    语法:more + 文件名

    说明: 按下回车刷新一行,按下空格刷新一屏,输入q键退出

     

    1.3.3 命令之:less

    作用:和more功能一样

    语法:less +文件名

    说明:linux中more与less的区别

    more:不支持后退,但几乎不需要加参数,空格键是向下翻页,Enter键是向下翻一行,在不需要后退的情况下比较方便

    less:支持前后翻滚,既可以向上翻页(pageup按键),也可以向下翻页(pagedown按键)。,空格键是向下翻页,Enter键是向下翻一行

     

    1.3.4 命令之:head

    作用: 用于显示文件的开头的内容。在默认情况下,head命令显示文件的头10行内容

    语法:head(选项)文件名

    参数: -n 显示从文件头开始的行数

    [root@localhost63 opt]# head /etc/passwd

    [root@localhost63 opt]# head -n 3 /etc/passwd #显示前3行

    1.3.5 命令之:tail

    作用: 用于显示文件中的尾部内容。默认在屏幕上显示指定文件的末尾10行

    语法:tail (选项)文件名

    参数:  

    -n 显示文件尾部多少行的内容(n为数字)

    -f  动态显示数据(不关闭),常用来查看日志

    [root@localhost63 ~]# tail -n 3 /var/log/secure  #查看最后3行记录

    [root@localhost63 ~]# tail -f /var/log/secure   #在一个终端执行此命令动态查看文件内容

    [root@localhost63 ~]# ssh root@192.168.1.63   #在另一个终端远程登录Linux,登录成功后

    [root@localhost63 ~]# tail -f /var/log/secure  #可以动态查看到登录成功的日志

    Nov 17 00:08:32 localhost63 sshd[2924]: Accepted password for root from 192.168.1.63 port 39904 ssh2

    1.4 实战:XFS文件系统的备份和恢复

      xfs听了xfsdump 和xfsrestore工具协助备份,XFS文件系统中的数据,xfsdump按inode顺序备份一个xfs文件系统

      centos7选择xfs格式作为默认文件系统,而且不再使用以前的ext,仍然支持ext4,xfs转为大数据产生,每个单个文件系统最大可以支持8eb,单个文件可以支持16tb,不仅数据量大,而且扩展性高,还可以通过xfsdump、xfsrestore来备份和恢复

      与传统的unix文件系统不同,xfs不需要再备份前辈卸载,对使用中的xfs文件系统做备份就可以保证镜像的一致性,xfs的备份和恢复的过程是可以被终端然后继续的,无序冻结文件系统,xfsdump升值提供了高性能的多线程备份操作-他把一次dumo拆分成多个数据流,每个数据流可以被发往不同的目的地

      首先了解下xfsdump的备份级别分别有以下两种,默认为0(即完全备份)

      0级别代表:  完全备份

      1-9级别代表:  增量备份

    扩展:

      完全备份:每次都把指定的备份目录完整的复制一遍,不管目录下的文件有没有变化

      增量备份:每次讲之前(第一次,第二次,直到前一次)做过备份之后有变化的文件进行备份

      差异备份:每次都将第一次完整备份依赖右边的文件进行备份

    1.4.1 实验环境准备

      系统centos7  添加一块虚拟硬盘(准备一个测试分区)

      正常使用一块磁盘过程如下:

      添加磁盘大小:20G---分区---格式化--挂载

      

      对添加的硬盘进行格式化:

      

    [root@localhost ~]# fdisk /dev/sdb#指定分区的设备

    欢迎使用 fdisk (util-linux 2.23.2)。

    更改将停留在内存中,直到您决定将更改写入磁盘。

    使用写入命令前请三思。

    Device does not contain a recognized partition table

    使用磁盘标识符 0x06d5a427 创建新的 DOS 磁盘标签。

    命令(输入 m 获取帮助):n  #创建一个新的分区

    Partition type:

       p   primary (0 primary, 0 extended, 4 free)

       e   extended

    Select (default p): p  #创建一个主分区

    分区号 (1-4,默认 1):

    起始 扇区 (2048-41943039,默认为 2048):

    将使用默认值 2048

    Last 扇区, +扇区 or +size{K,M,G} (2048-41943039,默认为 41943039):+1G  #指定分区大小

    分区 1 已设置为 Linux 类型,大小设为 1 GiB

    命令(输入 m 获取帮助):p  #打印分区表

    磁盘 /dev/sdb:21.5 GB, 21474836480 字节,41943040 个扇区

    Units = 扇区 of 1 * 512 = 512 bytes

    扇区大小(逻辑/物理):512 字节 / 512 字节

    I/O 大小(最小/最佳):512 字节 / 512 字节

    磁盘标签类型:dos

    磁盘标识符:0x06d5a427

       设备 Boot      Start         End      Blocks   Id  System

    /dev/sdb1            2048     2099199     1048576   83  Linux

    命令(输入 m 获取帮助):w  #保存

    The partition table has been altered!

    Calling ioctl() to re-read partition table.

    正在同步磁盘。

    [root@localhost ~]# ls  /dev/sdb*

    /dev/sdb  /dev/sdb1

    使用新的分区,格式化分区,并进行挂载

    [root@localhost ~]# mkfs.xfs /dev/sdb1

    [root@localhost ~]# mkdir /sdb1     #创建挂载点

    [root@localhost ~]# mount /dev/sdb1 /sdb1   #挂载

    准备备份测试文件

    [root@localhost ~]# cd /sdb1/

    [root@localhost sdb1]# cp /etc/passwd ./

    [root@localhost sdb1]# mkdir test

    [root@localhost sdb1]# touch test/a

    [root@localhost sdb1]# tree /sdb1/

    [root@localhost sdb1]# tree /sdb1/

    /sdb1/

    ├── passwd

    └── test

        └── a

    1.4.2 备份

    1、备份整个分区。 (这个功能就像是虚拟机的快照,服务器被黑后,进行快速恢复)

    xfsdump  -f 备份存放位置 要备份路径或设备文件

    注意:备份的路径这里不能写成/sdb1/。  可以是/dev/sdb1 或/sdb1

    [root@localhost sdb1]# xfsdump -f /opt/dump_sdb1  /dev/sdb1

    xfsdump: using file dump (drive_simple) strategy

    xfsdump: version 3.1.4 (dump format 3.0) - type ^C for status and control

    ========== dump label dialog ==============================

    please enter label for this dump session (timeout in 300 sec)

     -> dump_sdb1  指定备份会话标签

    session label entered: "dump_sdb1"

     --------------------------------- end dialog ---------------------------------

    xfsdump: level 0 dump of localhost.cn:/sdb1

    xfsdump: dump date: Fri Nov 17 12:24:53 2017

    xfsdump: session id: b5a25fcd-d43d-4308-bf29-142066f89d9a

    xfsdump: session label: "dump_sdb1"

    xfsdump: ino map phase 1: constructing initial dump list

    xfsdump: ino map phase 2: skipping (no pruning necessary)

    xfsdump: ino map phase 3: skipping (only one dump stream)

    xfsdump: ino map construction complete

    xfsdump: estimated dump size: 25856 bytes

    ============== media label dialog =============================

    please enter label for media in drive 0 (timeout in 300 sec)

     -> sdb1  指定设备标签,就是对要备份的设备做一个描述

    media label entered: "sdb1"

     --------------------------------- end dialog --------------------------------

    xfsdump: creating dump session media file 0 (media 0, file 0)

    xfsdump: dumping ino map

    xfsdump: dumping directories

    xfsdump: dumping non-directory files

    xfsdump: ending media file

    xfsdump: media file size 24544 bytes

    xfsdump: dump size (non-dir files) : 2592 bytes

    xfsdump: dump complete: 46 seconds elapsed

    xfsdump: Dump Summary:

    xfsdump:   stream 0 /opt/dump_sdb1 OK (success)

    xfsdump: Dump Status: SUCCESS

    2、 指定备份时免交互操作,方便后期做定时备份

    [root@localhost sdb1]# xfsdump -f /opt/dump_passwd /sdb1 -L dump_passwd -M media1

    -L  :xfsdump  纪录每次备份的 session 标头,这里可以填写针对此文件系统的简易说明

    -M  :xfsdump 可以纪录储存媒体的标头,这里可以填写此媒体的简易说明

     

    3、指定只备份分区中某个目录

    参数:-s 文件路径  只对指定的文件进行备份,-s指定时,路径写的是相对路径(-s可以是文件或目录)

    [root@localhost sdb1]# xfsdump -f /opt/dump_grub2 -s grub2/grub.cfg /boot -L dump_grub2 -M boot-sda1

    4、查看备份信息与内容

    备份成功后,我们就可以在/var/lib/xfsdump/inventory目录下看到生成的档案信息

    [root@localhost opt]# xfsdump  -I(字母大写i)

     

    测试恢复:先删除之前创建的内容

    [root@localhost sdb1]# ls

    passwd  test

    [root@localhost sdb1]# pwd

    /sdb1

    [root@localhost sdb1]# rm -rf ./*

     

    1.4.3 文件系统恢复

    语法:xfsrestore -f 指定恢复文件的位置 指定存放恢复后的文件的路径

    [root@localhost opt]# xfsrestore -f /opt/dump_sdb1  /sdb1

    查看恢复情况

    [root@localhost ~]# ls /sdb1/

    恢复单个文件如下:

    [root@localhost ~]# mkdir /var/test/

    [root@localhost ~]# xfsrestore -f /opt/dump_grub2 -s grub2/grub.cfg /var/test/

    [root@localhost ~]# xfsrestore -f /opt/dump_grub2 -s grub2 /var/test/  #恢复目录

    注:

    使用 xfsdump 时,请注意下面下面几个限制:
    1xfsdump 不支没有挂载的文件系统备份!所以只能备份已挂载的!
    2xfsdump 必须使用 root 的权限才能操作 (涉及文件系统的关系)
    3xfsdump 只能备份 XFS 文件系统
    4xfsdump 备份下来的数据 (档案或储存媒体只能让 xfsrestore 解析
    5xfsdump 是透过文件系统的 UUID 来分辨各个备份档的,因此不能备份两个具有相同 UUID 的文件系统

    1.4.4 增量备份

    概念

    增量备份是指在一次全备份或上一次增量备份后,以后每次的备份只需备份与前一次相比增加或者被修改的文件。这就意味着,第一次增量备份的对象是进行全备后所产生的增加和修改的文件;第二次增量备份的对象是进行第一次增量备份后所产生的增加和修改的文件,以此类推。

    优缺点

    优点:没有重复的备份数据,因此备份的数据量不大,备份所需的时间很短。

    缺点:数据恢复相对比较麻烦,它需要上一次全备份和所有增量备份的内容才能够完全恢复成功,并且它们必须沿着从全备份到依次增量备份的时间顺序逐个反推恢复,因此可能会延长的恢复时间

    实战: 增量备份文件系统

    准备一个备份目录进行备份

    [root@localhost sdb1]# tree  /sdb1

    /sdb1/

    ├── passwd

    └── test

        └── a

    对上面的内容进行第一次全备

    [root@localhost sdb1]# xfsdump -f /opt/test-full /sdb1 -L test-full -M media0

    增加一些内容,然后进行第1次增量备份

    [root@localhost ~]# touch  /sdb1/1.txt /sdb1/2.txt

    [root@localhost ~]# tree  /sdb1/

    /sdb1/

    ├── 1.txt

    ├── 2.txt

    ├── passwd

    └── test

    └── a 

    [root@localhost sdb1]# xfsdump -l 1 -f /opt/test-back1 /sdb1 -L test-bak1 -M media0

    -l <level>  做一个等级为1的备份

    再次增加内容,然后进行level 2级别的增量备

    [root@localhost sdb1]# touch  /sdb1/test/a.txt  /sdb1/test/b.txt

    [root@localhost ~]# tree /sdb1/

    /sdb1/

    ├── 1.txt

    ├── 2.txt

    ├── passwd

    └── test

        ├── a

        ├── a.txt

    └── b.txt 

    [root@localhost sdb1]# xfsdump -l 2 -f /opt/test-back2 /sdb1 -L test-bak2 -M media0

    [root@localhost ~]# rm -rf /sdb1/*    #删除所有数据

    现在进行恢复,要想恢复全部全部数据,包括新添加的文件,如何恢复?

    步骤:

    1、先恢复完全备份    

    2、情况1: 恢复最后一次增量备份(如果两次增量备份都是1级的,所以只需要恢复最后一个增量就可以了。

    3、情况2:如果你做的是第一次是1级备,第二次是2级备,那么你在恢复的时候就需要先恢复完全备份,然后是1级备,最后是2级备)

    [root@localhost ~]# xfsrestore -f /opt/test-full /sdb1/

    [root@localhost ~]# xfsrestore -f /opt/test-back2 /sdb1/  #故意先恢复back2,查看

    [root@localhost ~]# tree /sdb1/  #查看,发现没有1.txt ,2.txt

    /sdb1/

    ├── passwd

    └── test

        ├── a

        ├── a.txt

    └── b.txt 

    [root@localhost ~]# xfsrestore -f /opt/test-back1 /sdb1/   

    [root@localhost ~]# tree /sdb1/  

    到此,数据恢复成功了。

  • 相关阅读:
    C# String.Compare 方法测试
    C#checked 与 unchecked
    C#枚举类型
    C#结构体
    C越界和溢出的区别
    python/matlab : 将txt文件中的数据读为numpy数组
    matlab程序里调用python文件
    Python
    Pycharm调试及快捷键技巧
    Pycharm远程连接服务器debug时报错
  • 原文地址:https://www.cnblogs.com/hackerlin/p/11268536.html
Copyright © 2011-2022 走看看