ByeBye World

How can I Back TO last day ! hytxdzw hytidzw has pass ,The only thing you can do is reflash you life and do good thing to you partents , this is your very first part.

Quick Start

Create a new post

1
$ hexo new "My New Post"

More info: Writing

Run server

1
$ hexo server

More info: Server

Generate static files

1
$ hexo generate

More info: Generating

Deploy to remote sites

1
$ hexo deploy

More info: Deployment

Linux Find 命令精通指南

_作者:Sheryl Calish_简单介绍这一无处不在的命令的强大的方面以及混乱的方面。2008 年 7 月发布Linux find 命令是所有 Linux 命令中最有用的一个,同时也是最混乱的一个。它很难,因为它的语法与其他 Linux 命令的标准语法不同。但是,它很强大,因为它允许您按文件名、文件类型、用户甚至是时间戳查找文件。使用 find 命令,您不但可以找到具这些属性任意组合的文件,还可以对它找到的文件执行操作。本文的目的是,通过概述 find 命令的用途和潜能,简化该命令的学习和使用。同时,它将针对 find 命令的某些最强大但最混乱的方面提供一个基本的指南和参考。[注意:本文使用的 find 版本是 GNU 版本,因此,某些细节可能与其他版本的 find 有所不同。]基本格式开始之前,我们先来看一下 find 命令的基本结构:find start_directory test options criteria_to_match action_to_perform_on_results 在以下命令中, find 将开始在当前目录(用“.”表示)中查找任何扩展名为“java”的文件:find . -name “.java” 下面是该命令所找到的命令的缩略清单:find . -name “.java” ./REGEXPvalidate/src/oracle/otnsamples/plsql/ConnectionManager.java ./REGEXPvalidate/src/oracle/otnsamples/plsql/DBManager.java .. [注意:如果您从本文剪切并粘贴来运行该 find 命令,您可能需要使用自己的键盘替换双引号 (“”) 才能得出正确的结果。]以下命令将执行相同的操作。在这两种情况下,您都需要对通配符进行转义以确保它传递到 find 命令并且不由 shell 解释。因此,请将您的搜索字符串放到引号里,或者在它前面加上反斜线:find . -name \*.java 尽管 find 的所有参数均为可选,但是如果您未指定从哪里开始搜索,搜索默认将在当前目录中开始。如果您不指定要匹配的测试连接、选项或值,您的结果将不完整或者无区别。

运行以下三个 find 命令将得出同样的结果 — 当前目录和所有子目录中的所有文件(包括隐藏文件)的完整清单:find find . find . -print 这类似于运行一个带 -la 选项的 ls 命令。如果您希望上述命令的输出包含完整的路径名(或许是为了备份),您将需要指定起始目录的完整路径:find /home/bluher -name \.java /home/bluher/plsql/REGEXPvalidate/src/oracle/otnsamples/plsql/ConnectionManager.java /home/bluher/plsql/REGEXPvalidate/src/oracle/otnsamples/plsql/DBManager.java/ … 您还可以在搜索字符串中指定多个起始目录。如果以具有相应权限的用户身份运行,以下命令将下到 /usr、/home /tmp 目录查找所有 jar 文件:find /usr /home /tmp -name “.jar” 但是,如果您没有相应的权限,您在开始浏览许多系统目录时将生成错误消息。以下是一个示例:find: /tmp/orbit-root: Permission denied 您可以通过附加您的搜索字符串来避免混乱的输出,如下所示:find /usr /home /tmp -name “.jar” 2>/dev/null 这会将所有错误消息发送到空文件,因此提供清理器输出。默认情况下,find 是区分大小写的。对于不区分大小写的 find,将 -iname 测试替换为 -name 测试。find downloads -iname “.gif” downloads/.xvpics/Calendar05_enlarged.gif downloads/lcmgcfexsmall.GIF 除文件名外,您还可以按类型搜索文件。例如,您可以使用以下命令查找一个目录中的所有子目录:find . -type d 您可以使用以下命令查找您的/usr 目录中的所有符号链接:find /usr -type l 这可能会列出 3,000 多个链接。以下的任何一个命令使用根权限运行都将列出 /usr 目录中的链接以及它所指向的文件:# find /usr/bin -type l -name “z*” -exec ls -l {} \; lrwxrwxrwx 1 root root 8 Dec 12 23:17 /usr/bin/zsh -> /bin/zsh lrwxrwxrwx 1 root root 5 Dec 12 23:17 /usr/bin/zless -> zmore lrwxrwxrwx 1 root root 9 Dec 12 23:17 /usr/bin/zcat -> /bin/zcat find /usr/bin -type l -name “z*” -ls 但是,第二个更短的命令将列出更多的文件,以及目录和 inode 信息:在本文后面的部分中,我们将讨论 -exec 和 -ls 操作的用法。其他 find 可以找到的文件类型包括:• b — 块(缓存)特殊
• c — 字符(未缓存)特殊
• p — 命名管道 (FIFO)
• s — 套接字使用根作为 find 命令的起点会极大地降低系统的速度。如果您必须运行这样一个命令,您可以在非高峰时段或晚上运行它。您可以使用以下语法将输出重定向到一个文件:find / -print > masterfilelist.out 如果您错误地输入一个 find 命令,生成大量不必要的输出,只需按 CTRL-C 中断该命令,这将停止最近执行的命令。在具多个文件系统的企业网络上,限制 find 查找的文件也是一个特别好用的方法。尽可能多地使用选项和测试以减少系统上的负载。用于此目的的两个最有用的选项是 -xdev 和 -mount。它们通过阻止 find 下到其他文件系统(如 MS-DOS、CD-ROM 或 AFS)上的目录中缩短了搜索范围。这将搜索限制为同一类型的文件系统作为起始目录。如果运行 mount 命令,双引导系统上的用户可以使用这些选项。假设涉及 Windows 分区,您可以使用类似以下的命令安装它:mount -t vfat /dev/sda1 /mnt/msdos 您使用的实际命令取决于您的系统设置。您可以通过运行 df 或执行以下命令验证该分区已安装:find /mnt/msdos -name “.txt” 2> /dev/null 您应该看到 MS Windows 分区上列出了很多的文件。现在,运行以下带 -mount 或 -xdev 选项的命令:find / -name “.txt” -mount 2> /dev/null 或者find / -name “.txt” -xdev 2> /dev/null 还可以使用 -fstype 测试明确告知 find 在哪个文件系统中查找,如以下示例中所示:find / -name “.txt” -fstype vfat 2> /dev/null 查找时间find 命令有几个用于根据您系统的时间戳搜索文件的选项。这些时间戳包括 mtime 文件内容上次修改时间
atime — 文件被读取或访问的时间
ctime — 文件状态变化时间mtime 和 atime 的含义都是很容易理解的,而 ctime 则需要更多的解释。由于 inode 维护着每个文件上的元数据,因此,如果与文件有关的元数据发生变化,则 inode 数据也将变化。这可能是由一系列操作引起的,包括创建到文件的符号链接、更改文件权限或移动了文件等。由于在这些情况下,文件内容不会被读取或修改,因此 mtime 和 atime 不会改变,但 ctime 将发生变化。这些时间选项都需要与一个值 n 结合使用,指定为 -n、n+n_。_• -n 返回项小于 n
• +n 返回项大于 n
• n 返回项正好与 n 相等下面,我们来看几个例子,以便于理解。以下命令将查找在最近 1 小时内修改的所有文件:find . -mtime -1 ./plsql/FORALLSample ./plsql/RegExpDNASample /plsql/RegExpSample 用 1 取代 -1 运行同一命令将查找恰好在 1 小时以前修改的所有文件:find . -mtime 1 上述命令不会生成任何结果,因为它要求完全吻合。以下命令查找 1 个多小时以前修改的所有文件:find . -mtime +1 默认情况下,-mtime、-atime 和 -ctime 指的是最近 24 小时。但是,如果它们前面加上了开始时间选项,则 24 小时的周期将从当日的开始时间算起。您还可以使用 mmin、amin 和 cmin 查找在不到 1 小时的时间内变化了的时间戳。如果您在登录到您的帐户后立即运行以下命令,您将找到在不到 1 分钟以前读取的所有文件:find . -amin -1 ./.bashrc /.bash_history ./.xauthj5FCx1 应该注意的是,使用 find 命令查找文件本身将更改该文件的访问时间作为其元数据的一部分。您还可以使用 -newer、-anewer 和 –cnewer 选项查找已修改或访问过的文件与特定的文件比较。这类似于 -mtime、-atime 和 –ctime。

• -newer 指内容最近被修改的文件
• -anewer 指最近被读取过的文件
• -cnewer 指状态最近发生变化的文件要查找您的主目录中自上一个 tar 文件以来以某种方式编辑过的所有文件,使用以下命令:find . -newer backup.tar.gz 按大小查找文件-size 选项查找满足指定的大小条件的文件。要查找所有大于 5MB 的用户文件,使用find / -size +5000000c 2> /dev/null /var/log/lastlog /var/log/cups/access_log.4 /var/spool/mail/bluher 结尾的“c”以字节为单位报告我们的结果。默认情况下,find 以 512 字节块的数量报告大小。如果我们将“c”替换为“k”,我们还会看到以千字节的数量报告的结果,如果使用“w”,则会看到以两字节字的数量报告的结果。-size 选项经常用于搜索所有零字节文件并将它们移至 /tmp/zerobyte 文件夹。以下命令恰好可以完成这一任务:find test -type f -size 0 -exec mv {} /tmp/zerobyte \; -exec 操作允许 find 在它遇到的文件上执行任何 shell 命令。在本文的后面部分,您将看到其用法的更多示例。大括号允许移动每个空文件。选项 -empty 还可用于查找空文件:find test -empty test/foo test/test 按权限和所有者查找要监视您的系统安全离不开 find 命令。您可以使用符号或八进制表示法查找面向广大用户开放的文件,如下所示:find . -type f -perm a=rwx -exec ls -l {} \; 或者find . -type f -perm 777 -exec ls -l {} \; -rwxrwxrwx 1 bluher users 0 May 24 14:14 ./test.txt 在这一部分中,在上面和下面的命令中,我们使用了 -exec ls -l 操作,因此,您可以看到返回的文件的实际权限。以下命令将查找可由“other”和组写入的文件:find plsql -type f -perm -ug=rw -exec ls -l {} \; 2>/dev/null 或者find plsql -type f -perm -220 -exec ls -l {} \; 2>/dev/null -rw-rw-rw- 1 bluher users 4303 Jun 7 2004 plsql/FORALLSample/doc/otn_new.css -rw-rw-rw- 1 bluher users 10286 Jan 12 2005 plsql/FORALLSample/doc/readme.html -rw-rw-rw- 1 bluher users 22647 Jan 12 2005 plsql/FORALLSample/src/config.sql .. 下一个命令将查找由用户、组或二者共同写入的文件: find plsql -type f -perm /ug=rw -exec ls -l {} \; 2>/dev/null, or, find plsql -type f -perm /220 -exec ls -l {} \; 2>/dev/null -rw-r–r– 1 bluher users 21473 May 3 16:02 plsql/regexpvalidate.zip -rw-rw-rw- 1 bluher users 4303 Jun 7 2004 plsql/FORALLSample/doc/otn_new.css -rw-rw-rw- 1 bluher users 10286 Jan 12 2005 plsql/FORALLSample/doc/readme.html -rw-rw-rw- 1 bluher users 22647 Jan 12 2005 plsql/FORALLSample/src/config.sql 您可能会看到以下命令在 Web 和较早的手册中引用过:find . -perm +220 -exec ls -l {} \; 2> /dev/null + 符号的作用与 / 符号相同,但是现在新版 GNU findutils 中不支持使用该符号。要查找您的系统上所有人都可以写入的所有文件,使用以下命令:find / -wholename ‘/proc’ -prune -o -type f -perm -0002 -exec ls -l {} \; -rw-rw-rw- 1 bluher users 4303 Jun 7 2004/home/bluher/plsql/FORALLSample/doc/otn_new.css -rw-rw-rw- 1 bluher users 10286 Jan 12 2005 /home/bluher/plsql/FORALLSample/doc/readme.html … 第 4 个权限将在稍后进行讨论,但最后一个字段中的“2”是文件权限中的“other”字段,也称为写入位。我们在权限模式 0002 前面使用了破折号,以指明我们希望看到为 other 设置了写权限的文件,无论其他权限设置为什么。上述命令还引入了三个新概念。针对文件模式“/proc”使用 -wholename 测试,如果该模式已找到,-prune 可防止 find 下到该目录中。布尔类型“-o”使 find 可以针对其他目录处理该命令的其余部分。由于每个表达式之间有一个假设的隐式 and 运算符 (-a),因此,如果左侧的表达式计算结果为 false, and 之后的表达式将不进行计算;因此需要 -o 运算符。Find 还支持布尔类型 -not、!,就像使用括号强行优先一样。系统管理员经常使用 find 通过用户或组的名称或 ID 搜索特定用户或组的常规文件:[root] $ find / -type f -user bluher -exec ls -ls {} \; 下面是这样一个命令的高度精简的输出示例:4 -rw-r–r– 1 bluher users 48 May 1 03:09 /home/bluher/public_html/.directory 4 -rw-r–r– 1 bluher users 925 May 1 03:09 /home/bluher/.profile 您还可以使用 find 按组查找文件:[root] $ find / -type f -group users find / -type d -gid 100 该命令将列出由 ID 为 100 的组拥有的目录。要找到相应的 uid 或 gid,您可以针对 /etc/passwd 或 /etc/group 文件运行 more 或 cat 命令。除了查找特定已知用户和组的文件外,您还会发现它对于查找没有这些信息的文件也很有用。下一个命令将识别未列在 /etc/passwd 或 /etc/group 文件中的文件:find / -nouser -o -nogroup 上述命令可能不会在您的系统上生成实际的结果。但是,它可用于识别或许在经常移动后没有用户或组的文件。好了,现在我们可以解决本部分开始时提到的格外重要的权限了。SGID 和 SUID 是特殊访问权限标志,可以分配给基于 UNIX 的操作系统上的文件和目录。设置它们是为了允许访问计算机系统的普通用户使用临时提升的权限执行二进制可执行文件。find / \( -perm -2000 -o -perm -4000 \) -ls 167901 12 -rwsr-xr-x 1 root root 9340 Jun 16 2006 /usr/bin/rsh 167334 12 -rwxr-sr-x 1 root tty 10532 May 4 2007 /usr/bin/wall 在上述命令中,您可以看到转义括号的使用。您还可以看到权限的不同。第一个文件设置了 SGID 权限,第二个文件设置了 SUID 权限。上述命令中的最后的操作与带 -exec ls -dils 操作的 find 效果类似。控制 find与 Linux 中的许多命令不同,find 不需要 -r 或 -R 选项即可下到子目录中。它默认情况下就这样操作。但是,有时您可能希望限制这一行为。因此,选项 -depth、-maxdepth 和 -mindepth 以及操作 -prune 就派上用场了。我们已经看到了 -prune 是多么有用,下面让我们来看看 -depth、-maxdepth 和 -mindepth 选项。-maxdepth 和 -mindepth 选项允许您指定您希望 find 搜索深入到目录树的哪一级别。如果您希望 find 只在目录的一个级别中查找,您可以使用 maxdepth 选项。通过运行以下命令在目录树的前三个级别中查找日志文件,您可以看到 -maxdepth 的效果。使用该选项较之不使用该选项所生成的输出要少得多。find / -maxdepth 3 -name “*log” 您还可以让 find 在至少下至目录树三个级别的目录中查找:find / -mindepth 3 -name “*log” -depth 选项确保先在一个目录中进行查找,然后才在其子目录中进行查找。以下命令提供了一个示例:find -name “*test*“ -depth ./test/test ./test ./localbin/test ./localbin/test_shell_var ./localbin/test.txt ./test2/test/test ./test2/test ./test2 find 世界我们已经看过了 find 命令的一些更加有用以及有点难懂的功能,但是 find 还可以执行更多的任务。例如,有多个选项可以使 find 与较低的 UNIX 版本和其他操作系统相兼容并允许您执行打印输出到多个文件等操作。阅读本文后,您现在已经有了理解 find 参考指南的背景,我鼓励您深入研究这一强大、有用的工具。Sheryl Calish 是一位专攻 Linux 的 IT 顾问。她以前就职于 Blue Heron Consulting,现在是 EquityBuild 的 IT 总监。

false ,,,,,,,,,,,,,,,,

渗透测试TIPS之删除、伪造Linux系统登录日志

PS:本文仅限技术分享与讨论,严禁用于非法用途,任何非法利用与本文作者及FreeBuf无关


0×00. 引言

擦除日志在渗透测试中是非常重要的一个阶段,这样可以更好地隐藏入侵痕迹,做到不被系统管理人员察觉,实现长期潜伏的目的。 前段时间NSA泄露的渗透测试工具中就有一款wtmp日志的擦除,非常好用,这引起了我的兴趣,于是研究了一下linux 登录相关二进制日志的文件格式,用python写了一个日志擦除,伪造的工具(末尾附源码)

0×01. Linux中与登录有关的日志及其格式分析

Linux中涉及到登录的二进制日志文件有

/var/run/utmp

/var/log/wtmp

/var/log/btmp

/var/log/lastlog

其中 utmp 对应w 和 who命令; wtmp 对应last命令;btmp对应lastb命令;lastlog 对应lastlog命令

经查Linux man 手册,

/var/run/utmp
/var/log/wtmp
/var/log/btmp

的二进制格式都是一样的, 我们姑且称之为xtmp 格式

而/var/log/lastlog 文件的格式与之不同,需单独分析,下面我们先分析xtmp的文件格式吧,这里以utmp 格式为例

UTMP 文件格式

utmp 文件格式是这样的:

    #define UT_LINESIZE     32

    #define UT_NAMESIZE     32

    #define UT_HOSTSIZE     256

        struct utmp {

            short   ut_type;              /* Type of record */

            pid_t   ut_pid;               /* PID of login process */

            char    ut_line[UT_LINESIZE]; /* Device name of tty - "/dev/" */

            char    ut_id[4];             /* Terminal name suffix,

                                             or inittab(5) ID */

            char    ut_user[UT_NAMESIZE]; /* Username */

            char    ut_host[UT_HOSTSIZE]; /* Hostname for remote login, or

                                             kernel version for run-level

                                             messages */

            struct  exit_status ut_exit;  /* Exit status of a process

                                             marked as DEAD_PROCESS; not

                                             used by Linux init(8) */

            /* The ut_session and ut_tv fields must be the same size when

               compiled 32- and 64-bit.  This allows data files and shared

               memory to be shared between 32- and 64-bit applications. */

        #if __WORDSIZE == 64 && defined __WORDSIZE_COMPAT32

            int32_t ut_session;           /* Session ID (getsid(2)),

                                             used for windowing */

            struct {

                int32_t tv_sec;           /* Seconds */

                int32_t tv_usec;          /* Microseconds */

            } ut_tv;                      /* Time entry was made */

        #else

             long   ut_session;           /* Session ID */

             struct timeval ut_tv;        /* Time entry was made */

        #endif

           int32_t ut_addr_v6[4];        /* Internet address of remote

                                             host; IPv4 address uses

                                             just ut_addr_v6[0] */

            char __unused[20];            /* Reserved for future use */

        };

    其中 exit_status 结构为:

    struct exit_status {              /* Type for ut_exit, below */

        short int e_termination;      /* Process termination status */

        short int e_exit;             /* Process exit status */

    };

其中 ut_type 为日志记录的类型,主要有以下几种日志

    #define EMPTY         0 /* Record does not contain valid info

                               (formerly known as UT_UNKNOWN on Linux) */

    #define RUN_LVL       1 /* Change in system run-level (see

                               init(8)) */

    #define BOOT_TIME     2 /* Time of system boot (in ut_tv) */

    #define NEW_TIME      3 /* Time after system clock change

                               (in ut_tv) */

    #define OLD_TIME      4 /* Time before system clock change

                               (in ut_tv) */

    #define INIT_PROCESS  5 /* Process spawned by init(8) */

    #define LOGIN_PROCESS 6 /* Session leader process for user login */

    #define USER_PROCESS  7 /* Normal process */

    #define DEAD_PROCESS  8 /* Terminated process */

    #define ACCOUNTING    9 /* Not implemented */

    #define UT_LINESIZE      32

    #define UT_NAMESIZE      32

    #define UT_HOSTSIZE     256

utmp 记录例子(二进制内容解析处理后):

utmp.png

对比utmp的文件格式结构,挑几个重要的字段解释下

第1个字段7 表示这条记录类型,一般的用户正常登录记录类型都是7,错误登录是6 ,也就是btmp所记录的类型

第2个字段1497 是pid ,截图中我是用ssh远程登录linux,这里指的就是sshd的子进程bash的pid

utmp-pid.png

第3个字段pts/0 表示的登录的伪终端 ,后面一串\0是填充的数据

第4个字段 ts/0表示的伪终端的后缀

第5个字段root 表示登录用户名,后面一串\0是填充数据,因为这个字段为32个字节大小

第6个字段10.1.100.1 表示的是登录主机,后面一串\0是填充数据,因为这个字段为256个字节大小

第10个字段表示的是登录时间,精确到秒

第11个字段表示的是登录时间中微妙部分

第12个字段表示的是登录sessionid

lastlog 文件格式:

#define UT_LINESIZE     32
#define UT_HOSTSIZE     256
struct lastlog
  {
    __time_t ll_time;
    char ll_line[UT_LINESIZE];
    char ll_host[UT_HOSTSIZE];
  };

lastlog 记录例子(二进制内容解析处理后):

渗透测试之删除,伪造Linux系统登录日志

第1个字段表示最后一次登录时间

第2个字段表示最后一次登录的终端

第3个字段表示最后一次登录的IP

0×02. 擦除,伪造登录日志的测试

1.删除utmp记录,将自己从w或者who输出中隐藏

比如此时有两个登录记录,一个是root(要删除的记录),一个是f3

删除前:

渗透测试之删除,伪造Linux系统登录日志

删除后:

渗透测试之删除,伪造Linux系统登录日志

  1. 添加utmp记录,伪造登录信息

添加前:

渗透测试之删除,伪造Linux系统登录日志

添加后:

渗透测试之删除,伪造Linux系统登录日志

*注: *添加Fake 在线记录的时候,pid必须可以找到相应进程,一般可以使用sshd的或者是bash的相关PID

渗透测试之删除,伪造Linux系统登录日志

渗透测试之删除,伪造Linux系统登录日志

2.删除历史登录记录(wtmp)

删除前:

渗透测试之删除,伪造Linux系统登录日志

删除指定用户,指定host的历史登录记录

渗透测试之删除,伪造Linux系统登录日志

删除后:

渗透测试之删除,伪造Linux系统登录日志

3.添加wtmp记录

渗透测试之删除,伪造Linux系统登录日志

4.删除btmp记录

删除前

渗透测试之删除,伪造Linux系统登录日志

hacker 这个账户有很多次尝试登录记录

删除后:

渗透测试之删除,伪造Linux系统登录日志

5.添加btmp 伪造记录

渗透测试之删除,伪造Linux系统登录日志

6.删除lastlog 记录

hacker 用户最后一次登录记录,删除前:

渗透测试之删除,伪造Linux系统登录日志

删除后:

渗透测试之删除,伪造Linux系统登录日志

渗透测试之删除,伪造Linux系统登录日志

7.添加伪造的lastlog记录

python fake_login_log.py –mode add –type=lastlog –user=hacker –date=”2017-7-24 14:22:07

渗透测试之删除,伪造Linux系统登录日志

这里说明一下:lastlog中并不记录用户名,而是根据文件偏移位置来计算当前记录的用户名是多少,比如当前用户是f3,其UID为1001,那么lastlog 日志从头开始向后移动 1001 × LAST_STRUCT_SIZE处的位置则为f3用户最后一次登录记录写入处(用户即使没有最后一次登录记录,在相应的偏移处都会有记录,这就是我们使用lastlog看到的never login的记录)

0×03. 源码

直接帖源码,格式上可能会影响阅读体验,帖下我的在线源码地址吧:点击打开在线源码

0×04. 总结

目前此工具可以实现对:

/var/run/utmp

/var/log/wtmp

/var/log/btmp

/var/log/lastlog

进行删除,添加伪造记录功能,并且在修改相关文件后恢复其时间属性值(比如文件访问时间和文件修改时间),有人会说了,直接echo “” >/var/log/xtmp 不就行了吗,干嘛这么麻烦,直接删除是很好,不过有点粗暴。 本工具不仅可以实现按照 登录主机,登录用户, 时间戳等条件进行按需删除,还可以添加伪造登录记录,以达到迷惑系统管理员之目的。需要补充一点的是,目前还未实现根据时间区间来删除指定记录,也希望有兴趣的同学补充一下

参考:

1)https://linux.die.net/man/5/utmp
2)https://github.com/krig/lastlog/blob/master/lastlog.c

*本文作者:knpewg85942,转载请注明FreeBuf.COM

CentOS 6.3下配置软RAID(Software RAID)

一、RAID 简介

RAID 是英文Redundant Array of Independent Disks 的缩写,翻译成中文意思是“独立磁盘冗余阵列”,有时也简称磁盘阵列(Disk Array)。

简单的说,RAID是一种把多块独立的硬盘(物理硬盘)按不同的方式组合起来形成一个硬盘组(逻辑硬盘),从而提供比单个硬盘更高的存储性能和提供数据备份的技术。

组成磁盘阵列的不同方式称为RAID级别(RAID Levels),常见的RAID Level 包括raid0, raid1, raid5, raid10。各level 对比如下:

RAID等级

最少硬盘

最大容错

可用容量

读取性能

写入性能

安全性

目的

应用产业

0

2

0

n

n

n

一个硬盘异常,全部硬盘都会异常

追求最大容量、速度

3D产业实时渲染、视频剪接高速缓存

1

2

n-1

1

n

1

最高,一个正常即可

追求最大安全性

个人、企业备份

5

3

1

n-1

n-1

n-1

追求最大容量、最小预算

个人、企业备份

10

4

n/2

n/2

n

n/2

安全性高

综合RAID 0/1优点,理论速度较快

大型数据库、服务器

说明:n 代表硬盘总数

关于RAID的详细介绍,请参考:http://zh.wikipedia.org/wiki/RAID

二、系统环境

实验环境:Oracle VM VirtualBox

系统平台:CentOS release 6.3 (Final)

mdadm 版本:mdadm - v3.2.6 - 25th October 2012

三、设置磁盘

在Oracle VM VirtualBox 里模拟物理增加磁盘,在这篇文章中,我们将创建RAID0, RAID1, RAID5分区,RAID0 需要两块硬盘,RAID1 需要两块硬盘,RAID5需要四块硬盘,所以在这里添加了八块物理硬盘,每块5.00 GB.

26

在Linux 系统里使用fdisk –l 命令查看。

27

四、安装mdadm

mdadm 是multiple devices admin 的简称,它是Linux下的一款标准的软件RAID 管理工具。

4.1 查看是否安装了mdadm软件

# rpm -qa|grep mdadm

9

4.2 如果未安装,则使用yum 方式安装。

10

准备工作完毕,下面可以着手创建raid 了。

五、创建RAID0

5.1 新建分区

创建RAID0 需要两块硬盘,所以我们拿/dev/sdb 和/dev/sdc 来实验。

# fdisk /dev/sdb //对sdb 进行分区

输入”m”, 获取帮助,输入”p”, 查看分区前磁盘状态,其他Command action 具体含义请自行Google, Baidu。

3

输入”n” 新建分区,这里我们将整个磁盘都划分成一个分区,然后输入”p” 查看分区情况。

4

5.2 修改分区类型

默认新建分区的类型是Linux,代号83,我们需要将其修改为raid 类型。输入”t” ,然后输入”L” 列出所有的文件格式,这里我们选择”fd Linux raid auto”, 输入”fd”,然后再输入”p” 查看分区情况,这是分区格式已经变成了Linux raid autodetect.

5

5.3 保存分区

输入”w” 保存分区。

6

使用同样方法对/dev/sdc 进行分区操作。

5.4 同步分区情况

使用partprobe 命令同步分区情况。

7

5.5 查看现在的状态

# fdisk -l /dev/sdb /dev/sdc

11

5.6 开始创建RAID0

# mdadm -C /dev/md0 -ayes -l0 -n2 /dev/sd[b,c]1

12

说明:

-C  –create  创建阵列;

-a  –auto   同意创建设备,如不加此参数时必须先使用mknod 命令来创建一个RAID设备,不过推荐使用-a yes参数一次性创建;

-l   –level   阵列模式,支持的阵列模式有 linear, raid0, raid1, raid4, raid5, raid6, raid10, multipath, faulty, container;

-n –raid-devices 阵列中活动磁盘的数目,该数目加上备用磁盘的数目应该等于阵列中总的磁盘数目;

/dev/md0     阵列的设备名称;

/dev/sd{b,c}1  参与创建阵列的磁盘名称;

5.7 查看raid0 状态

# cat /proc/mdstat

# mdadm -D /dev/md0

13

说明:Raid Level : 阵列级别;

   Array Size : 阵列容量大小;

   Raid Devices : RAID成员的个数;

   Total Devices : RAID中下属成员的总计个数,因为还有冗余硬盘或分区,也就是spare,为了RAID的正常运珩,随时可以推上去加入RAID的;

   State : clean, degraded, recovering 状态,包括三个状态,clean 表示正常,degraded 表示有问题,recovering 表示正在恢复或构建;

   Active Devices : 被激活的RAID成员个数;

   Working Devices : 正常的工作的RAID成员个数;

   Failed Devices : 出问题的RAID成员;

   Spare Devices : 备用RAID成员个数,当一个RAID的成员出问题时,用其它硬盘或分区来顶替时,RAID要进行构建,在没构建完成时,这个成员也会被认为是spare设备;

   UUID : RAID的UUID值,在系统中是唯一的;

5.8 创建RAID 配置文件/etc/mdadm.conf

RAID 的配置文件为/etc/mdadm.conf,默认是不存在的,需要手工创建。

该配置文件的主要作用是系统启动的时候能够自动加载软RAID,同时也方便日后管理。但不是必须的,推荐对该文件进行配置。

我们这里需要创建这个文件,测试中发现,如果没有这个文件,则reboot 后,已经创建好的md0 会自动变成md127。

/etc/mdadm.conf 文件内容包括:

由DEVICE 选项指定用于软RAID的所有设备,和ARRAY 选项所指定阵列的设备名、RAID级别、阵列中活动设备的数目以及设备的UUID号。

5.8.1 创建/etc/mdadm.conf

# echo DEVICE /dev/sd{b,c}1 >> /etc/mdadm.conf

# mdadm –Ds >> /etc/mdadm.conf

5.8.2 修改配置文件

当前生成的/etc/mdadm.conf 文件内容并不符合所规定的格式,所以也是不生效的,这时需要手工修改该文件内容为如下格式:

# cat /etc/mdadm.conf

DEVICE /dev/sdb1 /dev/sdc1

ARRAY /dev/md0 level=raid0 num-devices=2 UUID=5160ea40:cb2b44f1:c650d2ef:0db09fd0

5.9 格式化磁盘阵列

# mkfs.ext4 /dev/md0

14

5.10 建立挂载点并挂载

# mkdir /raid0

# mount /dev/md0 /raid0/

15

可以看到,/dev/md0 的可用大小为9.9G。

5.11 写入/etc/fstab

为了下次开机还能正常使用我们的RAID设备,需要将挂载的信息写入/etc/fstab 文件中。

16

然后reboot 测试开机是否自动挂载,raid0 创建完毕。

六、创建RAID1

和创建raid0 类似,我们拿/dev/sdd 和/dev/sde 这两块硬盘来做实验。

6.1 新建分区并修改分区类型

17

使用同样方法对/dev/sde 进行分区操作,分区结果如下:

18

6.2 开始创建RAID1

# mdadm -C /dev/md1 -ayes -l1 -n2 /dev/sd[d,e]1

19

6.3 查看raid1 状态

# cat /proc/mdstat

# mdadm -D /dev/md1

20

说明:Used Dev Size : RAID单位成员容量大小,也就是构成RAID的成员硬盘或分区的容量的大小;

可以看到,raid1 正在创建,待创建完毕,状态如下:

21

6.4 添加raid1 到RAID 配置文件/etc/mdadm.conf 并修改

# echo DEVICE /dev/sd{b,c}1 >> /etc/mdadm.conf

# mdadm –Ds >> /etc/mdadm.conf

22

6.5 格式化磁盘阵列

# mkfs.ext4 /dev/md1

23

6.6 建立挂载点并挂载

# mkdir /raid1

# mount /dev/md1 /raid1/

24

可以看到,/dev/md1 的可用大小为4.9G。

6.7 写入/etc/fstab

25

然后reboot 测试开机是否自动挂载,raid1 创建完毕。

七、创建RAID5

RAID5 至少需要三块硬盘,我们拿/dev/sdf, /dev/sdg, /dev/sdh, /dev/sdi 这四块硬盘来做实验,三块做为活动盘,另一块做为热备盘。

7.1 新建分区并修改分区类型

分区结果如下:

28

7.2 开始创建RAID5

# mdadm -C /dev/md5 -ayes -l5 –n3 -x1 /dev/sd[f,g,h,i]1

29

说明:“-x1” 或”–spare-devices=1” 表示当前阵列中热备盘只有一块,若有多块热备盘,则将”–spare-devices” 的值设置为相应的数目。

7.3 查看raid5 状态

# cat /proc/mdstat

# mdadm -D /dev/md5

30

说明:Rebuild Status : RAID 的构建进度;

4 8 113 2 spare rebuilding /dev/sdh1 注:未被激活,正在构建中的成员,正在传输数据;

3 8 129 - spare /dev/sdi1 热备盘

raid5 正在创建,而且速度很慢,待创建完毕,状态如下:

31

7.4 添加raid5 到RAID配置文件/etc/mdadm.conf 并修改

# echo DEVICE /dev/sd{f,g,h,i}1 >> /etc/mdadm.conf

# mdadm –Ds >> /etc/mdadm.conf

32

7.5 格式化磁盘阵列

# mkfs.ext4 /dev/md5

33

7.6 建立挂载点并挂载

# mkdir /raid5

# mount /dev/md5 /raid5/

34

raid5 的可用大小为9.9G,即(3-1)x 5G.

向 /raid5 里面写入测试数据:

# touch test_raid5.failed
# touch test_raid5.fail
# ls

38

7.7 写入 /etc/fstab

35

然后reboot 测试开机是否自动挂载,raid5 创建完毕。

八、RAID维护

RAID 做好之后,还需要进行日常的维护操作,比如其中一块物理硬盘损坏,我们需要进行更换故障磁盘的操作,下面我们将模拟raid5 中磁盘损坏来讲解软RAID 的维护操作。

8.1 模拟磁盘损坏

在实际中,当软RAID 检测到某个磁盘有故障时,会自动标记该磁盘为故障磁盘,并停止对故障磁盘的读写操作。在这里我们将/dev/sdh1 模拟为出现故障的磁盘,命令如下:

# mdadm /dev/md5 -f /dev/sdh1

36

8.2 查看重建状态

在上面创建RAID 5过程中,我们设置了一个热备盘,所以当有标记为故障磁盘的时候,热备盘会自动顶替故障磁盘工作,阵列也能够在短时间内实现重建。通过查看”/proc/mdstat” 文件可以看到当前阵列的状态,如下:

37

以上信息表明阵列正在重建,当一个设备出现故障或被标记故障时,相应设备的方括号后将被标以(F),如 “sdh1[4](F)”。

其中 “[3/2]“ 的第一位数表示阵列所包含的设备数,第二位数表示活动的设备数,因为目前有一个故障设备,所以第二位数为2;

这时的阵列以降级模式运行,虽然该阵列仍然可用,但是不具有数据冗余;

而 “[UU_]“ 表示当前阵列可以正常使用的设备是/dev/sdf1 和/dev/sdg1,如果是设备 “/dev/sdf1” 出现故障时,则将变成[_UU]。

8.3 查看之前写入的测试数据是否还在

39

数据正常,未丢失。

8.4 重建完毕后查看阵列状态

40

当前的RAID 设备又恢复了正常。

8.5 移除损坏的磁盘

移除刚才模拟出现故障的/dev/sdh1,操作如下:

41

8.6 再次查看md5的状态

42

/dev/sdh1 已经移除了。

8.7 新加热备磁盘

如果是实际生产中添加新的硬盘,同样需要对新硬盘进行创建分区的操作,这里我们为了方便,将刚才模拟损坏的硬盘再次新加到raid5 中。

43

8.8 查看raid5 阵列状态

44

/dev/sdh1 已经变成了热备盘。

8.9 查看测试数据

45

数据正常,未丢失。故障切换测试完毕。

九、向RAID中增加存储硬盘

如果现在已经做好的RAID 空间还是不够用的话,那么我们可以向里面增加新的硬盘,来增加RAID 的空间。

9.1 在虚拟机中添加物理硬盘

上面我们已经在虚拟机中添加了八块硬盘,这里需要模拟新增硬盘,所以首先将虚拟机关闭,然后在存储里再次新增一块5GB的硬盘。然后分区等等操作,这里不再赘述。

47

9.2 向RAID 中新加一块硬盘

# mdadm /dev/md5 -a /dev/sdj1

48

查看此时的RAID 状态

49

默认情况下,我们向RAID 中增加的磁盘,会被默认当作热备盘,我们需要把热备盘加入到RAID 的活动盘中。

9.3 热备盘转换成活动盘

# mdadm -G /dev/md5 -n4

50

查看此时RAID 状态

51

/dev/sdj1 已经变成了活动盘,但是Array Size : 10465280 (9.98 GiB 10.72 GB) 并没有变大,这是因为构建没有完成,图中也可以看出Status 为clean, reshaping。

等RAID 完成构建后,RAID的容量就会改变为(4-1)x 5GB,查看进度可以参考Reshape Status,也可以参考/proc/mdstat.

53

构建完毕后的RAID 状态:

54

Array Size : 15697920 (14.97 GiB 16.07 GB),磁盘容量已经增加了。

9.4 扩容文件系统

RAID 构建完毕后,阵列容量增加,但是文件系统还没有增加,这时我们还需要对文件系统进行扩容。

# df –TH

# resize2fs /dev/md5

# df –TH

57

文件系统已经扩容到15G,而且测试数据正常,未丢失,新增物理硬盘成功。

9.5 修改RAID 配置文件/etc/mdadm.conf

56

9.6 reboot 测试

58

重启系统后,一切正常,Linux下配置软RAID成功。

参考资料

CentOS 6.3下配置LVM(逻辑卷管理)

http://www.cnblogs.com/mchina/p/linux-centos-logical-volume-manager-lvm.html


David Camp

  • 技术交流,请加QQ群:

    系统运维技术分享Ⅲ:416491168

  • 作者QQ:562866602
  • 我的微信号:mchina_tang
  • 给我写信:mchina_tang@qq.com
  • 我的地址:江苏·苏州

我们永远相信,分享是一种美德 | We Believe, Great People Share Knowledge…

CentOS 6.3下配置LVM(逻辑卷管理)

一、简介

LVM是逻辑盘卷管理(Logical Volume Manager)的简称,它是Linux环境下对磁盘分区进行管理的一种机制,LVM是建立在硬盘和分区之上的一个逻辑层,来提高磁盘分区管理的灵活性。

LVM的工作原理其实很简单,它就是通过将底层的物理硬盘抽象的封装起来,然后以逻辑卷的方式呈现给上层应用。在传统的磁盘管理机制中,我们的上层应用是直接访问文件系统,从而对底层的物理硬盘进行读取,而在LVM中,其通过对底层的硬盘进行封装,当我们对底层的物理硬盘进行操作时,其不再是针对于分区进行操作,而是通过一个叫做逻辑卷的东西来对其进行底层的磁盘管理操作。比如说我增加一个物理硬盘,这个时候上层的服务是感觉不到的,因为呈现给上层服务的是以逻辑卷的方式。

LVM最大的特点就是可以对磁盘进行动态管理。因为逻辑卷的大小是可以动态调整的,而且不会丢失现有的数据。如果我们新增加了硬盘,其也不会改变现有上层的逻辑卷。作为一个动态磁盘管理机制,逻辑卷技术大大提高了磁盘管理的灵活性。

基本的逻辑卷管理概念:

PV(Physical Volume)- 物理卷
物理卷在逻辑卷管理中处于最底层,它可以是实际物理硬盘上的分区,也可以是整个物理硬盘,也可以是raid设备

VG(Volumne Group)- 卷组
卷组建立在物理卷之上,一个卷组中至少要包括一个物理卷,在卷组建立之后可动态添加物理卷到卷组中。一个逻辑卷管理系统工程中可以只有一个卷组,也可以拥有多个卷组。

LV(Logical Volume)- 逻辑卷
逻辑卷建立在卷组之上,卷组中的未分配空间可以用于建立新的逻辑卷,逻辑卷建立后可以动态地扩展和缩小空间。系统中的多个逻辑卷可以属于同一个卷组,也可以属于不同的多个卷组。

关系图如下:

63

PE(Physical Extent)- 物理块

LVM 默认使用4MB的PE区块,而LVM的LV最多仅能含有65534个PE (lvm1 的格式),因此默认的LVM的LV最大容量为4M*65534/(1024M/G)=256G。PE是整个LVM 最小的储存区块,也就是说,其实我们的资料都是由写入PE 来处理的。简单的说,这个PE 就有点像文件系统里面的block 大小。所以调整PE 会影响到LVM 的最大容量!不过,在 CentOS 6.x 以后,由于直接使用 lvm2 的各项格式功能,因此这个限制已经不存在了。

pe_vg

二、系统环境

实验环境:Oracle VM VirtualBox

系统平台:CentOS release 6.3 (Final)

mdadm 版本:mdadm - v3.2.6 - 25th October 2012

LVM 版本:lvm2-2.02.100-8.el6.i686

设备类型:分区、物理硬盘、raid 设备

三、磁盘准备

在这篇文章中,我们将模拟raid5、分区、物理硬盘三种类型设备创建VG,raid5 需要四块硬盘,分区和物理硬盘各一块硬盘,还有扩容时需要至少一块硬盘,所以在虚拟机里添加八块硬盘,每块5GB.

1

四、安装LVM管理工具

4.1 检查系统中是否安装了LVM管理工具

# rpm -qa|grep lvm

4.2 如果未安装,则使用yum 方式安装

# yum install lvm*

# rpm -qa|grep lvm

3

五、新建一个raid5 设备

使用/dev/sdb, /dev/sdc, /dev/sdd, /dev/sde 四块物理硬盘做软raid模拟。

# mdadm -C /dev/md5 -ayes -l5 -n3 -x1 /dev/sd[b,c,d,e]

2

写入RAID配置文件/etc/mdadm.conf 并做适当修改。

# echo DEVICE /dev/sd{b,c,d,e} >> /etc/mdadm.conf

# mdadm –Ds >> /etc/mdadm.conf

详细请参考上篇文章:http://www.cnblogs.com/mchina/p/linux-centos-disk-array-software_raid.html

六、新建一个分区

使用/dev/sdf 模拟分区。

# fdisk /dev/sdf

# fdisk -l /dev/sdf

4

准备工作就绪,下面我们使用三种设备/dev/md5、/dev/sdf1、/dev/sdg 来完成LVM实验。

七、创建PV

# pvcreate /dev/md5 /dev/sdf1 /dev/sdg

5

查看PV

# pvdisplay

6

还可以使用命令pvs 和pvscan 查看简略信息。

# pvs

7

# pvscan

8

八、创建VG

# vgcreate vg0 /dev/md5 /dev/sdf1 /dev/sdg

9

说明:vg0 是创建的VG设备的名称,可以随便取;后面接上述的三个设备,也就是把三个设备组合成一个vg0.

查看VG

# vgdisplay

10

说明:

VG Name  VG的名称

VG Size  VG的总大小

PE Size  PE的大小,默认为4MB

Total PE  PE的总数量,5114 x 4MB = 19.98GB

Free PE / Size  剩余空间大小

同样可以使用命令vgs 和vgscan 查看。

# vgs

11

# vgscan

12

九、创建LV

# lvcreate -L 5G -n lv1 vg0

13

说明:

-L 指定创建的LV 的大小
-l 指定创建的LV 的PE 数量
-n LV的名字
上面命令的意思是:从vg0 中分出5G的空间给lv1 使用

查看LV的信息

# lvdisplay

14

说明:

LV Path  LV的路径,全名

LV Name  LV的名字

VG Name  所属的VG

LV Size  LV的大小

再来看VG 的信息

# vgs

15

VFree 从19.98g 减少到了14.98g,另外的5g 被分配到了lv1.

十、格式化LV

# mkfs.ext4 /dev/vg0/lv1

16

十一、挂载使用

# mkdir /mnt/lv1

# mount /dev/vg0/lv1 /mnt/lv1/

# df –TH

17

将挂载信息写入/etc/fstab

18

十二、添加测试数据

下面我们将对LVM进行扩容和缩减操作,所以向/mnt/lv1 中写入测试数据以验证LVM 的磁盘动态管理。

# touch /mnt/lv1/test_lvm_dynamic.disk

# touch /mnt/lv1/test_lvm_dynamic.disk2

# touch /mnt/lv1/test_lvm_dynamic.disk3

# ll /mnt/lv1/

19

十三、LVM的扩容操作

LVM最大的好处就是可以对磁盘进行动态管理,而且不会丢失现有的数据。

假如有一天,lv1的使用量达到了80%,需要扩容,那我们该怎么做呢?

因为vg0中还有很多剩余空间,所以我们可以从vg0中再分配点空间给lv1。

13.1 LV的扩容

查看vg0 的剩余容量,还有14.98g 可用。

15

对lv1进行扩容。

# lvextend -L +1G /dev/vg0/lv1

20

说明:在lv1原有的基础上增加了1G.

查看现在vg0 的剩余容量,减少了1G.

21

再查看lv1的容量,从5G增加到了6G.

22

使用df –TH 命令查看实际的磁盘容量。

23

发现实际容量并没有变化,因为我们的系统还不认识刚刚添加进来的磁盘的文件系统,所以还需要对文件系统进行扩容。

# resize2fs /dev/vg0/lv1

# df –TH

24

现在的可用容量已经增加到了5.9G。

查看测试数据

25

数据正常,对lv1的在线动态扩容完成。

还有一种情况,就是假如我们的vg0 空间不够用了,怎么办?这时我们就需要对VG进行扩容。

13.2 VG的扩容

VG的扩容可以有两种方法,第一种方法是通过增加PV来实现,操作如下:

A. 创建PV,使用/dev/sdh 来创建一个PV。

26

B. 扩容VG

现在的vg0 容量为19.98g.

27

# vgextend vg0 /dev/sdh

# vgs

28

现在vg0 的容量为24.97g, 增加了5GB,即一块物理硬盘的容量,VG扩容成功。

第二种方法是通过扩展RAID设备的容量来间接对VG进行扩容。这种方法在上一篇文章中有介绍,这里不再赘述,需要注意的地方是,/dev/md5 的大小变化后,需要调整PV的大小,操作如下:

# pvresize /dev/md5

29

十四、LVM的缩减操作

缩减操作需要离线处理。

14.1 LV的缩减

A. umount 文件系统

30

B. 缩减文件系统

# resize2fs /dev/vg0/lv1 4G

31

提示需要先运行磁盘检查。

C. 检查磁盘

# e2fsck –f /dev/vg0/lv1

32

D. 再次执行缩减操作

33

缩减文件系统成功,下面缩减LV的大小。

E. 缩减LV

# lvreduce /dev/vg0/lv1 –L 4G

34

说明:Step E 和Step D 缩减的大小必须保持一致,这里的4G是缩减到的大小;如果使用的是”-4G”,则表示容量减少多少的意思。

F. 挂载查看

35

LV 缩减成功。

G. 查看测试数据

36

数据正常。

14.2 VG的缩减

A. umount 文件系统

37

B. 查看当前的PV详情

38

C. 将/dev/sdg 从vg0 中移除

# vgreduce vg0 /dev/sdg

39

D. 再次查看PV情况

40

/dev/sdg 已经不属于vg0了。

E. 查看vg0 的情况

41

vg0 的大小减少了5GB.

VG 缩减成功。

十五、删除LVM

如果要彻底的来移除LVM的话,需要把创建的步骤反过来操作。

15.1 umount 文件系统

37

15.2 移除LV

# lvremove /dev/vg0/lv1

45

15.3 移除VG

# vgremove vg0

46

15.4 移除PV

# pvremove /dev/md5 /dev/sdf1 /dev/sdg /dev/sdh

62

LVM 移除成功。

十六、LVM 快照(snapshot)

快照就是将当时的系统信息记录下来,就好像照相一样,未来若有任何资料变动了,则原始资料会被移动到快照区,没有被改动的区域则由快照区与档案系统共享

snapshot

LVM 系统快照区域的备份示意图(虚线为档案系统,长虚线为快照区)

左图为最初建立系统快照区的状况,LVM 会预留一个区域 (左图的左侧三个PE 区块) 作为数据存放处。此时快照区内并没有任何数据,而快照区与系统区共享所有的PE 数据, 因此你会看到快照区的内容与文件系统是一模一样的。等到系统运作一阵子后,假设A 区域的数据被更动了 (上面右图所示),则更动前系统会将该区域的数据移动到快照区,所以在右图的快照区被占用了一块PE 成为A,而其他B 到I 的区块则还是与文件系统共享!

快照区与被快照的LV 必须要在同一个VG 里。

16.1 建立LV

# lvcreate -L 100M -n lv1 vg0

# mkfs.ext4 /dev/vg0/lv1

# mount /dev/vg0/lv1 /mnt/lv1/

16.2 写入测试数据

# touch /mnt/lv1/test_lvm_snapshot_1

# touch /mnt/lv1/test_lvm_snapshot_2

# cp -a /etc/ /mnt/lv1/

# cp -a /boot/ /mnt/lv1/

51

16.3 创建快照

# lvcreate -L 80M -s -n lv1snap /dev/vg0/lv1

说明:为/dev/vg0/lv1 创建一个大小为80M,名称为lv1snap 的快照。

# lvdisplay

53

/dev/vg0/lv1snap 的LV Size 为100MB,使用量为0.01%.

16.4 将刚才创建的快照挂载查看

55

/mnt/lv1 和/mnt/snapshot 是一模一样的。

16.5 进行档案的修改操作

56

16.6 再次查看

57

snapshot 的使用量为10.36%,原始资料有改动。

16.7 对snapshot 里的资料进行打包备份,准备还原

58

16.8 卸载并移除snapshot

59

16.9 卸载并格式化/mnt/lv1,清空数据

60

16.10 恢复数据

61

可以看到,原始数据已经成功恢复。

LVM 快照实验成功。

注意:对lv1的修改量不能超过快照的大小,由于原始数据会被搬移到快照区,如果你的快照区不够大,若原始资料被更动的实际数据量比快照区大,那么快照区当然容纳不了,这时候快照功能会失效喔!

参考资料

CentOS 6.3下配置软RAID(Software RAID)

http://www.cnblogs.com/mchina/p/linux-centos-disk-array-software_raid.html


David Camp

  • 技术交流,请加QQ群:

    系统运维技术分享Ⅲ:416491168

  • 业务合作,请联系作者QQ:562866602
  • 我的微信号:mchina_tang
  • 给我写信:mchina_tang@qq.com
  • 我的地址:江苏·苏州

我们永远相信,分享是一种美德 | We Believe, Great People Share Knowledge…

Linux中对逻辑卷进行扩容与缩小

一、在扩容之前,先查看自己逻辑卷,卷组,物理卷的信息:(在上一篇的基础上:Linux中对逻辑卷的建立

查看物理卷:

# pvdisplay /dev/sdc1

查看卷组:

vgdisplay /dev/zhi

查看逻辑卷:

lvdisplay /dev/zhi/lv-zhi

二、对逻辑卷扩容

现在我要对逻辑卷/dev/zhi/lv-zhi 增加2G:(如果是减少就改为减号)

lvextend -L +2G /dev/zhi/lv-zhi

在增加完成后,重新识别:

1

resize2fs /dev/zhi/lv-zhi

注意:

  我的逻辑卷的文件系统为ext4所以用resize2fs来识别,如果你的是xfs文件系统,则应该使用:

  xfs_growfs /dev/zhi/lv-zhi

重新查看逻辑卷信息:

三、对卷组扩容

现在我要对逻辑卷在增加5G,可是现在卷组中只剩下2G的空间。所以要先对卷组扩容,然后在对逻辑卷扩容

1.新建分区5G:

1

fdisk /dev/sdc

2.内核重新识别

1

partprobe /dev/sdc

3.创建物理卷

1

pvcreate /dev/sdc2

4.增加卷组

1

vgextend zhi /dev/sdc2

查看vg的信息:

5.增加逻辑卷的大小:

1

lvextend -L +5G /dev/zhi/lv-zhi

6.重新刷新

1

resize2fs /dev/zhi/lv-zhi

查看逻辑卷的信息:

** 四、缩小逻辑卷**

**  在对逻辑卷收缩时,数据丢失的风险比扩容时的大,除了提前做好数据的备份外,还要检查文件系统的完整性。**

**  1.卸载逻辑卷lv-zhi**

umount /dev/zhi/lv-zhi

  2.检查文件系统的完整性

e2fsck -f /dev/zhi/lv-zhi

**  3.重新刷新逻辑卷的大小为120MB**

resize2fs /dev/zhi/lv-zhi 120M

**  4.把逻辑卷减小到120MB**

lvreduce -L 120M /dev/zhi/lv-zhi

**  5.重新识别逻辑卷的大小,然后挂载**

resize2fs -f /dev/zhi/lv-zhi

mount -a

**  6.查看信息**

版权

作者:feiquan

出处:http://www.cnblogs.com/feiquan/

版权声明:本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

大家写文都不容易,请尊重劳动成果~ 这里谢谢大家啦(/ω\)如果是此文是转载文章,本人会附上转载链接,此篇文章的版权归原创作者所属,如果侵权请与我联系,我会删除此文。

若没有标明转载链接,此篇文章属于本人的原创文章,其版权所属:
作者:feiquan
出处:http://www.cnblogs.com/feiquan/
版权声明:本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
大家写文都不容易,请尊重劳动成果~ 这里谢谢大家啦(/ω\)

Using Shell Script to Manage SSH

SSH Maker

!/bin/bash

SSH_PATH=~/temp/server

echo “Please make sure you have install ‘bash’ and ‘expert’!”
echo “Please enter the name of file you need to create, e.g. ‘google-ssh’”
read FILE_NAME

echo “Please enter the path you want to save, default value ‘${SSH_PATH}’”
read TEMP_PATH

if [ ! -z “$TEMP_PATH” ]
then
SSH_PATH=”$TEMP_PATH”
fi

if [ ! -d “${SSH_PATH}” ]
then
mkdir -p ${SSH_PATH}
fi

if [ -f “${SSH_PATH}/${FILE_NAME}.sh” ]
then
echo “The file ${FILE_NAME}.sh has existed at the ${SSH_PATH}”
echo “what do you want to do?”
echo “1 delete the exist file”
echo “2 change the exist file name to ${FILE_NAME}2.sh”
read EXIST_FILE
if [“${EXIST_FILE}” -eq 1]
then
rm -f ${SSH_PATH}/${FILE_NAME}.sh
else
mv ${SSH_PATH}/${FILE_NAME}.sh ${SSH_PATH}/${FILE_NAME}2.sh
fi
fi

echo “Please select the method of SSH connect and enter the digit:”
echo “1 Password”
echo “2 Key”
read SSH_METHOD

echo “Please enter the server of SSH:”
read SSH_SERVER

echo “Please enter the port: (defealt 22)”
read TEMP_PORT

if [ -z “$TEMP_PORT” ]
then
TEMP_PORT=22
fi

PORT=”${TEMP_PORT}”

case ${SSH_METHOD} in
1)
echo “Please enter the username:”
read SSH_USER
echo “Please enter the password:”
read SSH_PASS
echo “#!/usr/bin/expect
spawn ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -o ServerAliveInterval=15 -o ServerAliveCountMax=3 -p $PORT ${SSH_USER}@${SSH_SERVER}
expect ‘password:’
send \“${SSH_PASS}\r\“ interact” >> ${SSH_PATH}/${FILE_NAME}.sh
;;
2)
echo “Please enter the username:”
read SSH_USER
echo “Please enter the full path of the private key, e.g. ~/temp/server/test.pem”
read SSH_KEY
echo “#!/bin/sh
ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -o ServerAliveInterval=15 -o ServerAliveCountMax=3 -i \“${SSH_KEY}\“ ${SSH_USER}@${SSH_SERVER}” >> ${SSH_PATH}/${FILE_NAME}.sh
;;
*) echo “INVALID METHOD!” ;;
esac

chmod +x ${SSH_PATH}/${FILE_NAME}.sh

${SSH_PATH}/${FILE_NAME}.sh

SSH Connector

!/bin/bash

Please make sure you have install “bash” and “expert”!

SSH_PATH=~/temp/server
chmod -R 777 ${SSH_PATH}

path=”” # could set to any absolute path
declare -a array=( “${SSH_PATH}”/*.sh )
j=1
for i in “${array[@]}”
do
echo “$j $i” | sed “s#${SSH_PATH}/##”
((j++))
done

echo “Please select which server you want to connect:”
read server
server=$((server-1))
echo “You will connect to ${array[server]} now!”
${array[server]}

Anyconnect

全局Anyconnect使用起来往往不是很方便,国内的网站会慢,一些要求验证本地IP的数据库也会用不了。因此,通过添加route或no-route表来实现特定IP范围走本地还是走Anyconnect(即分流),以此满足不同网站的访问需求。

Proxy VS Anyconnect

Proxy配合gfwlist可以实现较为精确的分流模式,而且按需配置需要代理的程序。Anyconnect只能通过在服务器段添加route或no-route表实现分流,同时只支持IP段建立分流表,分流表200条以内,只能扩大目标IP段来压缩至200行。不过anyconnect一直是政府、企业和学校采购的方案,从技术上稳定性较好,安全性也高,只要服务器能撑得住。

思路

收集别人的结果

优点:效率高;

缺点:质量无法保证,对于成熟的项目,一般较为精确(比如goagent带动的Google IP段),对于一些小站,很少人会做。

收集ASN记录

优点:效率较高,因为是网站注册提供的数据,可信度较高;

缺点:数据不完整,因为很多网站节点多或是用上了CDN,ASN的记录总是不完全的。同时收集需要一定的采集技术。

通过收集DNS和域名,解析网站IP段

原理:因为访问网站的流程为本地请求域名<–>DNS服务器将域名转换为IP地址<–>最近服务器IP。尽可能采集网站有很多子域名和附属域名,因为不同子域名或附属域名调用的服务器可能不同。网站的节点分布较多,因此要收集各个地区的DNS,这样能尽可能的将挖出分布各地的节点。如果要做的是no-route表,国内能访问即可,也就是只要收集国内的DNS即可。如果做的是route表,则可以选择临近国家的DNS,如港澳台、日本、韩国、新加坡、美国等。

优点:适用性较广,尽可能的囊括IP段,同样可以处理小型网站

缺点:为了尽可能囊括IP段,同时确保不超出200行数据,势必要扩大IP段,形成不少的噪声。同时采集域名和DNS需要一定技术手段、解析耗时也较长。

实现

anyconnect打算分成四个表:

  • All:内网IP段走本地,其他走anyconnect。
  • Scholar:数据库和内网IP段走本地,其他走anyconnect。
  • NoRoute:国内主要IP段走本地,其他走anyconnect。
  • Route:国外被墙网站走anyconnect,其他走本地。

Scholar表

由于数据库网站较多,没有别人的成果,AS查起来不方柏霓,因此选择通过域名和DNS解析的方法获得IP段。

数据库比较全的国内学校:上海交通大学、浙江大学、清华大学、中国科学院大学。

这里选用上海交通大学的数据库列表:http://www.lib.sjtu.edu.cn/index.php?m=content&c=index&a=lists&catid=223

DNS采集自:http://www.ip.cn/dns.html

采集的数据,按行排列,最后留多一个空行,分别保存成domain.txt和dns.txt。将下列代码复制保存为getip.sh。

#!/bin/bash
[ -e result.txt ]
rm result.txt
operation(){
    result=$(nslookup $domain $dns | awk '/^Address: / { print $2 }') && echo "$result $domain $dns" >> result.txt
}
while read -r domain
do
tmp_fifofile=/tmp/$$.fifo
#echo $tmp_fifofile
mkfifo $tmp_fifofile # 新建一个fifo的管道文件
exec 6<>$tmp_fifofile # 绑定fd6
rm $tmp_fifofile
# 这里是向管道添加了$thread个空行
THREAD=500 # 线程数,可以改变
for i in $(seq 0 $THREAD);do
    echo
done >&6
CONFIG_FILE=dns.txt
# 修改这个脚本到生成环境,主要是修改operation和CONFIG_FILE配置
# 每次读取一行数据
while read dns
do
    # 一个read -u6命令执行一次,就从fd6中减去一个回车符,然后向下执行,
    # fd6 中没有回车符的时候,就停在这了,从而实现了线程数量控制
    read -u6
    {
       # 操作成功,记录到成功日志,修改echo
       # 操作失败,记录到错误日志
       operation && echo "$domain $dns success" || echo "$domain $dns error"
       # 当进程结束以后,再向fd6中加上一个回车符,即补上了read -u6减去的那个
       echo  >&6
    } & # 后台执行,这里的 &是非常重要的,同时有$THREAD个后台进程 
done < ${CONFIG_FILE}
wait # 等待所有的后台子进程结束
exec 6>&- # 关闭df6
done < domain.txt

bash getip.sh运行脚本,解析IP,最后的结果以result.txt文件输出。由于企业、学校的IP段一般较多,将得到的IP,用正则,转换为*.*.0.0的IP段,再根据情况,合并成*.0.0.0。no-route和route不能同时使用!同时要确定数据在200行以内!anyconnect支持的IP范围格式(IP地址/子网掩码)如下:

no-route = *.0.0.0/255.0.0.0
route = *.*.0.0/255.255.0.0

再加上常见的内网IP段,这样就制作好了一个分流表。

NoRoute表

别人有整理过,直接搬来用也差不多。

https://github.com/wongsyrone/ocserv-cn-no-route-1/blob/master/tmp/cn-no-route2.txt

Route表

有人发过不全的一个CIDR格式的IP段,可以利用网站https://www.ipconvertertools.com/cidr2ipranges将其转换为IP地址/子网掩码的格式。

https://github.com/SteamedFish/gfwiplist/blob/master/gfwiplist.txt

Tips:
Scholar表存在问题:
time.com和一个数据库(scopus)使用AWS的节点,同一IP端,不好划分。

Awesome MacOS Application

Visual Studio Code

Sublime Text

1234567891011

TwitterInc200 User LicenseEA7E-8900071D77F72E 390CDD93 4DCBA022 FAF6079061AA12C0 A37081C5 D0316412 4584D13694D7F7D4 95BC8C1C 527DA828 560BB037D1EDDD8C AE7B379F 50C9D69D B35179EF2FE898C4 8E4277A8 555CE714 E1FB0E43D5D52613 C3D12E98 BC49967F 7652EED29D2D2E61 67610860 6D338B72 5CF95C69E36B85CC 84991F19 7575D828 470A92AB

Additional Operation:
Add this lines to /etc/hosts

12

0.0.0.0 license.sublimehq.com0.0.0.0 www.sublimehq.com

OmniGraffle

1234

yhiblogFCQK-IRED-UTLC-KQBJ-WYTW-EEHW-YTWCCWT-NBJH-KMCX-QXBM-SJWP-GEHS-JWPGVGN-MPNJ-ECFN-KQIO-HDSH-GEHH-DSH

MindManager

12

AP11-974-FPCB-B7C2-652DAP11-366-CPDA-A849-353D

GoldenDict

Charles

12

Registered Name:https://zhile.ioLicense Key: 48891cf209c6d32bf4

JetBrains IDE

Visit the website to generate the key or using the following key directly:
http://idea.lanyus.com/

1

EB101IWSWD-eyJsaWNlbnNlSWQiOiJFQjEwMUlXU1dEIiwibGljZW5zZWVOYW1lIjoibGFuIHl1IiwiYXNzaWduZWVOYW1lIjoiIiwiYXNzaWduZWVFbWFpbCI6IiIsImxpY2Vuc2VSZXN0cmljdGlvbiI6IkZvciBlZHVjYXRpb25hbCB1c2Ugb25seSIsImNoZWNrQ29uY3VycmVudFVzZSI6ZmFsc2UsInByb2R1Y3RzIjpbeyJjb2RlIjoiSUkiLCJwYWlkVXBUbyI6IjIwMTgtMTAtMTQifSx7ImNvZGUiOiJSUzAiLCJwYWlkVXBUbyI6IjIwMTgtMTAtMTQifSx7ImNvZGUiOiJXUyIsInBhaWRVcFRvIjoiMjAxOC0xMC0xNCJ9LHsiY29kZSI6IlJEIiwicGFpZFVwVG8iOiIyMDE4LTEwLTE0In0seyJjb2RlIjoiUkMiLCJwYWlkVXBUbyI6IjIwMTgtMTAtMTQifSx7ImNvZGUiOiJEQyIsInBhaWRVcFRvIjoiMjAxOC0xMC0xNCJ9LHsiY29kZSI6IkRCIiwicGFpZFVwVG8iOiIyMDE4LTEwLTE0In0seyJjb2RlIjoiUk0iLCJwYWlkVXBUbyI6IjIwMTgtMTAtMTQifSx7ImNvZGUiOiJETSIsInBhaWRVcFRvIjoiMjAxOC0xMC0xNCJ9LHsiY29kZSI6IkFDIiwicGFpZFVwVG8iOiIyMDE4LTEwLTE0In0seyJjb2RlIjoiRFBOIiwicGFpZFVwVG8iOiIyMDE4LTEwLTE0In0seyJjb2RlIjoiUFMiLCJwYWlkVXBUbyI6IjIwMTgtMTAtMTQifSx7ImNvZGUiOiJDTCIsInBhaWRVcFRvIjoiMjAxOC0xMC0xNCJ9LHsiY29kZSI6IlBDIiwicGFpZFVwVG8iOiIyMDE4LTEwLTE0In0seyJjb2RlIjoiUlNVIiwicGFpZFVwVG8iOiIyMDE4LTEwLTE0In1dLCJoYXNoIjoiNjk0NDAzMi8wIiwiZ3JhY2VQZXJpb2REYXlzIjowLCJhdXRvUHJvbG9uZ2F0ZWQiOmZhbHNlLCJpc0F1dG9Qcm9sb25nYXRlZCI6ZmFsc2V9-Gbb7jeR8JWOVxdUFaXfJzVU/O7c7xHQyaidCnhYLp7v32zdeXiHUU7vlrrm5y9ZX0lmQk3plCCsW+phrC9gGAPd6WDKhkal10qVNg0larCR2tQ3u8jfv1t2JAvWrMOJfFG9kKsJuw1P4TozZ/E7Qvj1cupf/rldhoOmaXMyABxNN1af1RV3bVhe4FFZe0p7xlIJF/ctZkFK62HYmh8V3AyhUNTzrvK2k+t/tlDJz2LnW7nYttBLHld8LabPlEEjpTHswhzlthzhVqALIgvF0uNbIJ5Uwpb7NqR4U/2ob0Z+FIcRpFUIAHEAw+RLGwkCge5DyZKfx+RoRJ/In4q/UpA==-MIIEPjCCAiagAwIBAgIBBTANBgkqhkiG9w0BAQsFADAYMRYwFAYDVQQDDA1KZXRQcm9maWxlIENBMB4XDTE1MTEwMjA4MjE0OFoXDTE4MTEwMTA4MjE0OFowETEPMA0GA1UEAwwGcHJvZDN5MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAxcQkq+zdxlR2mmRYBPzGbUNdMN6OaXiXzxIWtMEkrJMO/5oUfQJbLLuMSMK0QHFmaI37WShyxZcfRCidwXjot4zmNBKnlyHodDij/78TmVqFl8nOeD5+07B8VEaIu7c3E1N+e1doC6wht4I4+IEmtsPAdoaj5WCQVQbrI8KeT8M9VcBIWX7fD0fhexfg3ZRt0xqwMcXGNp3DdJHiO0rCdU+Itv7EmtnSVq9jBG1usMSFvMowR25mju2JcPFp1+I4ZI+FqgR8gyG8oiNDyNEoAbsR3lOpI7grUYSvkB/xVy/VoklPCK2h0f0GJxFjnye8NT1PAywoyl7RmiAVRE/EKwIDAQABo4GZMIGWMAkGA1UdEwQCMAAwHQYDVR0OBBYEFGEpG9oZGcfLMGNBkY7SgHiMGgTcMEgGA1UdIwRBMD+AFKOetkhnQhI2Qb1t4Lm0oFKLl/GzoRykGjAYMRYwFAYDVQQDDA1KZXRQcm9maWxlIENBggkA0myxg7KDeeEwEwYDVR0lBAwwCgYIKwYBBQUHAwEwCwYDVR0PBAQDAgWgMA0GCSqGSIb3DQEBCwUAA4ICAQC9WZuYgQedSuOc5TOUSrRigMw4/+wuC5EtZBfvdl4HT/8vzMW/oUlIP4YCvA0XKyBaCJ2iX+ZCDKoPfiYXiaSiH+HxAPV6J79vvouxKrWg2XV6ShFtPLP+0gPdGq3x9R3+kJbmAm8w+FOdlWqAfJrLvpzMGNeDU14YGXiZ9bVzmIQbwrBA+c/F4tlK/DV07dsNExihqFoibnqDiVNTGombaU2dDup2gwKdL81ua8EIcGNExHe82kjF4zwfadHk3bQVvbfdAwxcDy4xBjs3L4raPLU3yenSzr/OEur1+jfOxnQSmEcMXKXgrAQ9U55gwjcOFKrgOxEdek/Sk1VfOjvS+nuM4eyEruFMfaZHzoQiuw4IqgGc45ohFH0UUyjYcuFxxDSU9lMCv8qdHKm+wnPRb0l9l5vXsCBDuhAGYD6ss+Ga+aDY6f/qXZuUCEUOH3QUNbbCUlviSz6+GiRnt1kA9N2Qachl+2yBfaqUqr8h7Z2gsx5LcIf5kYNsqJ0GavXTVyWh7PYiKX4bs354ZQLUwwa/cG++2+wNWP+HtBhVxMRNTdVhSm38AknZlD+PTAsWGu9GyLmhti2EnVwGybSD2Dxmhxk3IPCkhKAK+pl0eWYGZWG3tJ9mZ7SowcXLWDFAk0lRJnKGFMTggrWjV8GYpw5bq23VmIqqDLgkNzuoog==

Additional Operation:
Add this lines to /etc/hosts

1

0.0.0.0 account.jetbrains.com

Anki

f.lux

Alfred

TeamViewer

Homebrew

12345678

brew install wget opensslwget https://github.com/DoubleLabyrinth/navicat-keygen/archive/mac.zipunzip mac.zipcd navicat-keygen-mac/navicat-keygen/make releasecd ../navicat-patchermake release./navicat-patcher /Applications/Navicat\ Premium.app/Contents/MacOS/Navicat\ Premium

Generate a self-signed code-sign certificate and always trust it. Then use codesign to re-sign Navicat Premium.app.

123

codesign -f -s “yhiblog” /Applications/Navicat\ Premium.appcd ../navicat-keygen./navicat-keygen 2048key.pem

Disconnect your internet, and open “navicat”, choose Manual Activation. See detail:
https://github.com/DoubleLabyrinth/navicat-keygen/blob/mac/README.md

Axure RP

1234567891011

Team EditionKoshywTADPqxn3KChzJxLmUr5jTTitCgsfRkftQQ1yIG9HmK83MYSm7GPxLREGn+Ii6xY Pro editionKoshyvOGJRhoXEfnOfMy5CtKnY2kY7dy6XacABiPhi5hxeoSrpaUwt3ErjXW8BL86t7DR Enterprise editionKoshyG+8mHClRTq3V9jVHXHwbe7iCcXfl5u1ssC+NzEcR7gYjffEukH6d3N1B/6/79ZRZ

FineReader

http://www.abbyydownloads.com/frmacpro/ABBYY\_FineReaderPro\_1215_19.dmg

1

FSER-1200-HIOB-HIOB-HIOB-0889

Additional Operation:
System Preferences–>Firewall–>Firewall Options…–>Add “FineReader” and “block incoming connections”

ON1 Photo RAW

https://ononesoft.cachefly.net/photoraw2018/mac/gm_5088/ON1_Photo_RAW_2018.dmg
Owners Sign in–>No internet connection?

123

Email:yhiblog@shui.azurewebsites.netPassword:yhiblogOffline Code:368d7c330035edcd74738987e1448d79:ef5fc33fb756f46121176af7aa551f10a36a0658363123b03fdbbf818a30f297

Adobe Acrobat Reader DC

Proxifier

1

P427L-9Y552-5433E-8DSR3-58Z68

Iris

Beyond Compare

Only be able to activate the version below 4.2.4. https://www.scootersoftware.com/BCompareOSX-4.2.3.22587.zip
Open trial.key at path: /Applications/Beyond\ Compare.app/Contents/Resources/trial.key
Replace content of trial.key with:

12345678

--- BEGIN LICENSE KEY —H1bJTd2SauPv5Garuaq0Ig43uqq5NJOEw94wxdZTpU-pFB9GmyPk677gJvC1Ro6sbAvKR4pVwtxdCfuoZDb6hJ5bVQKqlfihJfSYZt-xVrVU27+0JahFbqTmYskatMTgPyjvv99CF2Te8ec+Ys2SPxyZAF0YwOCNOWmsyqN5y9tq2Kw2pjoiDs5gIH-uw5U49JzOB6otS7kThBJE-H9A76u4uUvR8DKb+VcBrWu5qSJGEnbsXNfJdq5L2D8QgRdV-sXHp2A-7j1X2n4WIISvU1V9koIySNisHFBTcWJS0sC5BTFwrtfLEE9lEwz2bxHQpWJiu12ZeKpi+7oUSqebX+— END LICENSE KEY —–

Save trial.key file & restart Beyond Compare app
Additional Operation:
System Preferences–>Firewall–>Firewall Options…–>Add “Beyond Compare” and “block incoming connections”

010 Editor

12

yhiblog2EE7-839C-90E2-9673

Snagit

http://download.techsmith.com/snagitmac/enu/Snagit.dmg

123

HCAVC-9CCYN-TAVEC-CCDCD-V4FB5AM4UU-X5ZBW-WULCC-DCSDZ-F239CZMAM4-5UU5C-MYBC5-CUFJ5-D67F7

Additional Operation:
System Preferences–>Firewall–>Firewall Options…–>Add “Snagit” and “block incoming connections”

Office

Filename:SW_DVD5_Office_Mac_Standard_2016_MultiLang_-2_ISO_MLF_X20-45880.iso
MD5:da19a8d901b369b3dd9fa01bf901f02a
Download link:
http://jzhj.gpa.edu.cn/download/macoffice2016.html
http://seu.gpa.edu.cn/download/macoffice2016.html

1.4 Billion Clear Text Credentials Discovered in a Single Database

A Massive Resource for Cybercriminals Makes it Easy to Access Billions of Credentials.

Now even unsophisticated and newbie hackers can access the largest trove ever of sensitive credentials in an underground community forum. Is the cyber crime epidemic about become an exponentially worse?

While scanning the deep and dark web for stolen, leaked or lost data, 4iQdiscovered a single file with a database of 1.4 billion clear text credentials — the largest aggregate database found in the dark web to date.

None of the passwords are encrypted, and what’s scary is the we’ve tested a subset of these passwords and most of the have been verified to be true.

The breach is almost two times larger than the previous largest credential exposure, the Exploit.in combo list that exposed 797 million records. This dump aggregates 252 previous breaches, including known credential lists such as Anti Public and Exploit.in, decrypted passwords of known breaches like LinkedIn as well as smaller breaches like Bitcoin **and Pastebin sites.**

This is not just a list. It is an aggregated, interactive database that allows for fast (one second response) searches and new breach imports. Given the fact that people reuse passwords across their email, social media, e-commerce, banking and work accounts, hackers can automate account hijacking or account takeover.

This database makes finding passwords faster and easier than ever before. As an example searching for “admin,” “administrator” and “root” returned** 226,631 passwords of admin users in a few seconds**.

The data is organized alphabetically, offering examples of trends in how people set passwords, reuse them and create repetitive patterns over time. The breach offers concrete insights into password trends, cementing the need for recommendations, such as the NIST Cybersecurity Framework.

While we are still processing the data, below are the technical details of our initial findings, including:

  • Sources of the Data
  • Details about the Dump File
  • Data Freshness
  • Discoveries regarding Credential Stuffing and Password Reuse

Source of the Data

The dump includes a file called “imported.log” with 256 corpuses listed, including and with added data from all those in the Exploit.in and Anti Public dumps as well as 133 addition or new breaches. Some examples of the breaches listed the file we found:

Last breaches added to the database

About the Dump File

The 41GB dump was found on 5th December 2017 in an underground community forum. The database was recently updated with the last set of data inserted on 11/29/2017. The total amount of credentials (usernames/clear text password pairs) is 1,400,553,869.

There is not indication of the author of the database and tools, although Bitcoin and Dogecoin wallets are included for donation.

The data is structured in an alphabetic directory tree fragmented in 1,981 pieces to allow fast searches.

Data is fragmented and sorted in two and three level directories

The dump includes search tools and insert scripts explained in a README file.

Freshness

We’ve found that although the majority of these breaches are known within the Breach and Hacker community, 14% of exposed username/passwords pairs had not previously been decrypted by the community and are now available in clear text.

We compared the data with the combination of two larger clear text exposures, aggregating the data from Exploit.in and Anti Public. This new breach adds 385 million new credential pairs, 318 million unique users, and 147 million passwords pertaining to those previous dumps.

Data comparison with Exploit.in and Anti Public breaches

Credential Stuffing and Password Reuse

Since the data is alphabetically organized, the massive problem of password reuse — — same or very similar passwords for different accounts — — appears constantly and is easily detectable.

A couple of the constant examples of password reuse that can be found:

password reuse examples discovered

And how password patterns changes over time:

password patterns discovered

Top Passwords

The list of top 40 Passwords and volume found:

More Analysis, Stay Tuned

This experience of searching and finding passwords within this database is as scary as it is shocking. Almost all of the users we’ve checked have verified the passwords we found were true. Most reactions were

“_but that’s an old password…_”

commonly followed by an

“_Oh my god! I still use that password in site…_”

a few seconds later.

4iQ’s mission is to protect your digital identity in the new data breach era by scanning the surface, social and deep and dark web.

We will be following up with more information soon and will provide solutions to protect consumers and companies from this and other alarming exposures.


UPDATE — 12/12/2017

Some answers to a number of requests we’ve received:

Quite a few people have asked for a link to the database, but we cannot do that. Our policy, is not to share links or details open resources that can spread such sensitive information.

Password Verification

As several people pointed out, including Tony:

Update 12/22/17

We now have aportal(https://verify.4iq.com)where you can enter your email and receive truncated passwords sent back to that account.

We will also let you know if we did not find exposed passwords.

Please help us verify the data by hitting “reply” answering the four questions provided. Emailing us this information will help us verify and validate the data, and we can then publish statistics on these findings.

Thanks!!