Ubuntu安装Nginx和正确卸载Nginx Nginx相关

1.Ubuntu下安装Nginx比较简单

敲入下列命令即可:

    sudo apt-get update
    sudo apt-get install nginx

 

 

2.Ubuntu下卸载,稍不注意就会入坑

 

复制代码
    sudo apt-get remove nginx nginx-common # 卸载删除除了配置文件以外的所有文件。

    sudo apt-get purge nginx nginx-common # 卸载所有东东,包括删除配置文件。

    sudo apt-get autoremove # 在上面命令结束后执行,主要是卸载删除Nginx的不再被使用的依赖包。

    sudo apt-get remove nginx-full nginx-common #卸载删除两个主要的包。

  sudo service nginx restart  #重启nginx
复制代码

 

上面的命令基本上都能解决你在Ubuntu下安装卸载Nginx的问题。

 

 

3.查看nginx进程

复制代码
ps aux|grep nginx

在虚拟环境下安装uwsgi
pip install uwsgi

######启动Nginx服务
[root@typecodes ~]# service nginx start
######停止Nginx服务
[root@typecodes ~]# service nginx stop
######重启Nginx服务
[root@typecodes ~]# service nginx restart
######Nginx服务的状态
[root@typecodes ~]# service nginx status
######在Nginx服务启动的状态下,重新加载nginx.conf这个配置文件
[root@typecodes ~]# service nginx reload



复制代码

 

 

 

 

 

 

Django的部署可以有很多方式,采用nginx+uwsgi的方式是其中比较常见的一种方式。

在这种方式中,我们的通常做法是,将nginx作为服务器最前端,它将接收WEB的所有请求,统一管理请求。nginx把所有静态请求自己来处理(这是NGINX的强项)。然后,NGINX将所有非静态请求通过uwsgi传递给Django,由Django来进行处理,从而完成一次WEB请求。

可见,uwsgi的作用就类似一个桥接器。起到桥梁的作用。

Linux的强项是用来做服务器,所以,下面的整个部署过程我们选择在Ubuntu下完成。

 

一、安装Nginx                                                                        

Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,并在一个BSD-like 协议下发行。其特点是占有内存少,并发能力强,事实上nginx的并发能力确实在同类型的网页服务器中表现较好。

Nginx同样为当前非常流行的web服务器。利用其部署Django,我们在此也做简单的介绍。

Nginx官网:http://nginx.org/

打开ubuntu控制台(ctrl+alt+t)利用Ubuntu的仓库安装。

fnngj@ubuntu:~$ sudo apt-get install nginx  #安装

启动Nginx:

fnngj@ubuntu:~$ /etc/init.d/nginx start  #启动
fnngj@ubuntu:~$ /etc/init.d/nginx stop  #关闭
fnngj@ubuntu:~$ /etc/init.d/nginx restart  #重启

 

修改Nginx默认端口号,打开/etc/nginx/nginx.conf 文件,修改端口号。

复制代码
复制代码
 server {
    listen       8088;    # 修改端口号
    server_name  localhost;

    #charset koi8-r; 

    #access_log  logs/host.access.log  main;

    location / {
        root   html;
        index  index.html index.htm;
    }
复制代码
复制代码

大概在文件36行的位置,将默认的80端口号改成其它端口号,如 8088。因为默认的80端口号很容易被其它应用程序占用。

然后,通过上面命令重启nginx。访问:http://127.0.0.1:8088/

如果出现如上图,说明Nginx启动成功。

 

二、安装uwsgi

通过pip安装uwsgi。

root@ubuntu:/etc# python3 -m pip install uwsgi

 

测试uwsgi,创建test.py文件:

def application(env, start_response):
    start_response('200 OK', [('Content-Type','text/html')])
    return [b"Hello World"]

 

通过uwsgi运行该文件。

fnngj@ubuntu:~/pydj$ uwsgi --http :8001 --wsgi-file test.py

 

接下来配置Django与uwsgi连接。此处,假定的我的django项目位置为:/home/fnngj/pydj/myweb

fnngj@ubuntu:~/pydj$ uwsgi --http :8001 --chdir /home/fnngj/pydj/myweb/ --wsgi-file myweb/wsgi.py --master --processes 4 --threads 2 --stats 127.0.0.1:9191

 

常用选项:

http : 协议类型和端口号

processes : 开启的进程数量

workers : 开启的进程数量,等同于processes(官网的说法是spawn the specified number ofworkers / processes)

chdir : 指定运行目录(chdir to specified directory before apps loading)

wsgi-file : 载入wsgi-file(load .wsgi file)

stats : 在指定的地址上,开启状态服务(enable the stats server on the specified address)

threads : 运行线程。由于GIL的存在,我觉得这个真心没啥用。(run each worker in prethreaded mode with the specified number of threads)

master : 允许主进程存在(enable master process)

daemonize : 使进程在后台运行,并将日志打到指定的日志文件或者udp服务器(daemonize uWSGI)。实际上最常用的,还是把运行记录输出到一个本地文件上。

pidfile : 指定pid文件的位置,记录主进程的pid号。

vacuum : 当服务器退出的时候自动清理环境,删除unix socket文件和pid文件(try to remove all of the generated file/sockets)

 

三、Nginx+uwsgi+Django                                         

接下来,我们要将三者结合起来。首先罗列一下项目的所需要的文件:

myweb/

├── manage.py

├── myweb/

│   ├── __init__.py

│   ├── settings.py

│   ├── urls.py

│   └── wsgi.py

└── myweb_uwsgi.ini

在我们通过Django创建myweb项目时,在子目录myweb下已经帮我们生成的 wsgi.py文件。所以,我们只需要再创建myweb_uwsgi.ini配置文件即可,当然,uwsgi支持多种类型的配置文件,如xml,ini等。此处,使用ini类型的配置。

复制代码
复制代码
# myweb_uwsgi.ini file
[uwsgi]

# Django-related settings

socket = :8000

# the base directory (full path)
chdir           = /home/fnngj/pydj/myweb

# Django s wsgi file
module          = myweb.wsgi

# process-related settings
# master
master          = true

# maximum number of worker processes
processes       = 4

# ... with appropriate permissions - may be needed
# chmod-socket    = 664
# clear environment on exit
vacuum          = true
复制代码
复制代码

这个配置,其实就相当于在上一小节中通过wsgi命令,后面跟一堆参数的方式,给文件化了。

socket  指定项目执行的端口号。

chdir   指定项目的目录。

module  myweb.wsgi ,可以这么来理解,对于myweb_uwsgi.ini文件来说,与它的平级的有一个myweb目录,这个目录下有一个wsgi.py文件。

其它几个参数,可以参考上一小节中参数的介绍。

 

接下来,切换到myweb项目目录下,通过uwsgi命令读取myweb_uwsgi.ini文件启动项目。

复制代码
复制代码
fnngj@ubuntu:~$ cd /home/fnngj/pydj/myweb/
fnngj@ubuntu:~/pydj/myweb$ uwsgi --ini myweb_uwsgi.ini 
[uWSGI] getting INI configuration from myweb_uwsgi.ini
*** Starting uWSGI 2.0.12 (32bit) on [Sat Mar 12 13:05:06 2016] ***
compiled with version: 4.8.4 on 26 January 2016 06:14:41
os: Linux-3.19.0-25-generic #26~14.04.1-Ubuntu SMP Fri Jul 24 21:18:00 UTC 2015
nodename: ubuntu
machine: i686
clock source: unix
detected number of CPU cores: 2
current working directory: /home/fnngj/pydj/myweb
detected binary path: /usr/local/bin/uwsgi
!!! no internal routing support, rebuild with pcre support !!!
chdir() to /home/fnngj/pydj/myweb
your processes number limit is 15962
your memory page size is 4096 bytes
detected max file descriptor number: 1024
lock engine: pthread robust mutexes
thunder lock: disabled (you can enable it with --thunder-lock)
uwsgi socket 0 bound to TCP address :8000 fd 3
Python version: 3.4.3 (default, Oct 14 2015, 20:37:06)  [GCC 4.8.4]
*** Python threads support is disabled. You can enable it with --enable-threads ***
Python main interpreter initialized at 0x8b52dc0
your server socket listen backlog is limited to 100 connections
your mercy for graceful operations on workers is 60 seconds
mapped 319920 bytes (312 KB) for 4 cores
*** Operational MODE: preforking ***
WSGI app 0 (mountpoint='') ready in 1 seconds on interpreter 0x8b52dc0 pid: 7158 (default app)
*** uWSGI is running in multiple interpreter mode ***
spawned uWSGI master process (pid: 7158)
spawned uWSGI worker 1 (pid: 7160, cores: 1)
spawned uWSGI worker 2 (pid: 7161, cores: 1)
spawned uWSGI worker 3 (pid: 7162, cores: 1)
spawned uWSGI worker 4 (pid: 7163, cores: 1)
复制代码
复制代码

注意查看uwsgi的启动信息,如果有错,就要检查配置文件的参数是否设置有误。

 

再接下来要做的就是修改nginx.conf配置文件。打开/etc/nginx/nginx.conf文件,添加如下内容。

复制代码
复制代码
……
server {
    listen         8099; 
    server_name    127.0.0.1 
    charset UTF-8;
    access_log      /var/log/nginx/myweb_access.log;
    error_log       /var/log/nginx/myweb_error.log;

    client_max_body_size 75M;

    location / { 
        include uwsgi_params;
        uwsgi_pass 127.0.0.1:8000;
        uwsgi_read_timeout 2;
    }   
    location /static {
        expires 30d;
        autoindex on; 
        add_header Cache-Control private;
        alias /home/fnngj/pydj/myweb/static/;
     }
 }
……
复制代码
复制代码

listen 指定的是nginx代理uwsgi对外的端口号。

server_name  网上大多资料都是设置的一个网址(例,www.example.com),我这里如果设置成网址无法访问,所以,指定的到了本机默认ip。

在进行配置的时候,我有个问题一直想不通。nginx到底是如何uwsgi产生关联。现在看来大概最主要的就是这两行配置。

include uwsgi_params;

uwsgi_pass 127.0.0.1:8000;

include 必须指定为uwsgi_params;而uwsgi_pass指的本机IP的端口与myweb_uwsgi.ini配置文件中的必须一直。

 

现在重新启动nginx,翻看上面重启动nginx的命令。然后,访问:http://127.0.0.1:8099/

通过这个IP和端口号的指向,请求应该是先到nginx的。如果你在页面上执行一些请求,就会看到,这些请求最终会转到uwsgi来处理。

 

=============

ps: 这个过程本应不算复杂,之前花两天时间没搞定,索性放到了一边,这次又花了两天时间才算搞定。网上搜到的文章比较乱,有些太简单的看不懂,有些又太啰嗦的不知道核心的几步是什么,希望本文能帮到你。

 

Linux中apt与apt-get命令的区别与解释apt方式卸载软件

apt方式卸载删除命令

apt-get –purge remove
删除已安装包(不保留配置文件)。
如软件包a,依赖软件包b,则执行该命令会删除a,而且不保留配置文件

apt-get autoremove
删除为了满足依赖而安装的,但现在不再需要的软件包(包括已安装包)。
如软件包a,依赖软件包b,则执行该命令会同时删除软件包a,b

apt-get remove
删除已安装的软件包(保留配置文件)。
如软件包a,依赖软件包b,则执行该命令会删除a,且保留配置文件

apt-get autoclean
APT的底层包是dpkg, 而dpkg 安装Package时, 会将 *.deb 放在 /var/cache/apt/archives/中.
apt-get autoclean 只会删除 /var/cache/apt/archives/ 已经过期的deb.

apt-get clean
使用 apt-get clean 会将 /var/cache/apt/archives/ 的 所有 deb 删掉.
类似于 rm /var/cache/apt/archives/*.deb

linux卸载apache安装nginx部署

 

劲枫 2018-12-18 19:59:54 1577 收藏
分类专栏: 笔记
版权
sudo service apache2 stop

update-rc.d -f apache2 remove

sudo apt-get remove apache2

sudo apt-get update

sudo apt-get install nginx

nginx流量拆分、端口映射、静态资源代理
————————————————
版权声明:本文为CSDN博主「劲枫」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/TCF_JingFeng/article/details/85063297

linux系统部署Nginx

linux系统部署Nginx

一、linux系统部署Nginx

1、准备工作
Nginx的安装依赖于以下三个包,意思就是在安装Nginx之前首先必须安装一下的三个包,注意安装顺序如下:
1 SSL功能需要openssl库,直接通过yum安装:
 yum install openssl
2 gzip模块需要zlib库,直接通过yum安装:
 yum install zlib
3 rewrite模块需要pcre库,直接通过yum安装:
 yum install pcre
2、安装Nginx依赖项和Nginx
1 
使用yum安装nginx需要包括Nginx的库,安装Nginx的库
rpm -Uvh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm
2 
使用下面命令安装nginx
yum install nginx
3 
启动Nginx
service nginx start
nginx -s reload  :修改配置后重新加载生效
3、直接浏览器访问localhost就会出现Nginx的欢迎界面表示你安装成功了,否则就是安装失败了
4、配置Nginx
CentOS安装Nginx后,安装在了
/etc/nginx/目录下,你可以打开/etc/nginx/conf.d/default/conf查看里面的配置,包括监听端口,域名和nginx访问的根目录

二、linux下配置nginx使用service nginx start 服务

1:接下来我们简单的为它提供一个服务脚本吧!
# vim  /etc/init.d/nginx

2:新建文件/etc/rc.d/init.d/nginx,内容如下:

#!/bin/bash
# chkconfig:235 85 15
# description: Nginx is an HTTP server

. /etc/rc.d/init.d/functions

start() {

        echo "Start..."

        /usr/local/nginx/sbin/nginx &> /dev/null

        if [ $? -eq 0 ];then

                echo "Start successful!"

        else

                echo "Start failed!"

        fi

}

 

stop() {

        if killproc nginx -QUIT ;then

                echo "Stopping..."

        fi

}

 

restart() {

        stop

        sleep 1

        start

}

 

reload() {

        killproc nginx -HUP

        echo "Reloading..."

}

 

configtest() {

        /usr/local/nginx/sbin/nginx -t

}

 

case $1 in

start)

        start ;;

stop)

        stop ;;

restart)

        restart ;;

reload)

        reload ;;

configtest)

        configtest ;;

*)

        echo "Usage: nginx {start|stop|restart|reload|configtest}"

        ;;

esac

之后给这个文件可执行权限:

chmod  +x  /etc/init.d/nginx

现在可以使用 start,stop 这些参数控制Nginx服务了

Nginx编译安装时常见错误分析

Nginx编译安装时常见错误分析 – a2796749的专栏 – CSDN博客​blog.csdn.net

linux如何查看nginx是否启动

第一种方法:查看进程列表并过滤

 ps -ef | grep nginx 

第二种方法:使用netstat命令

netstat -anp | grep :80

nginx卸载

    yum remove nginx 

linux系统上nginx安装及简单的反向代理配置

1. 更改配置文件

其配置文件位置: /application/nginx/conf/nginx.conf

2.重启nginx

先 ps -ef | grep nginx ,会出现5个关于nginx的进程,如果5个进程的id分别为 100、101、102、103、104
杀掉所有nginx进程 kill -9 101 102 103 104 
进入目录 cd /usr/sbin
重启   nginx -c /etc/nginx/nginx.conf

至于 nginx -s  reload 不建议使用,本人亲试,有时候无效

启动nginx的时候也可以 cd  /usr/sbin,然后直接 nginx , (-c 配置文件,表示根据指定文件启动,如果该配
置文件和安装的nginx命令不是一个版本,会报错) 启动后,nginx -t  可以查看是根据那个配置文件启动的,
所以建议linux系统里只保留一个nginx.conf文件, 以免出现冲突,一般nginx.conf在两个位置,
分别是/usr/local/nginx/conf/nginx.conf和/etc/nginx/nginx.conf

nginx.conf 配置如下:

http{
        .........
    server{
        listen      80;
        server_name    192.16.10.10;
        location / {
            proxy_pass http://localhost:8081
        }
      }

      server{
            listen      80;
            server_name      www.acdf.com;
            location / {
                    proxy_pass http://localhost:8082
        }
     }
}                                            

疑问:

1.需要两个tomcat实例共用 80 端口,是不是 监听  listen  都为 80 ?
2.nginx 是怎样根据请求地址 来正则匹配 到不同的 虚拟主机的?我的理解是申请两个域名都绑定到我
映射的同一 ip,然后在不同的 server{} 中的 server_name 填入两个域名,通过域名匹配再转到本地的
http://localhost:8081 
3.就是 server_name  ,这个到底是什么意思,该怎么填写?网上有说填 localhost 的,也有 像我第一种
配置直接写ip:port   192.16.10.10:8081 的。如果是这种ip:port 方式的话,我的前端请求地址该如何写
,是直接写我映射的地址  http://192.16.10.10   还是  http://192.16.10.10:8081  ? 但是这样写的话
,我监听的 80 端口还有作用吗? 我的 server_name 又该怎样写?
server下的节点:
server_name :基于域名的虚拟主机,转发到哪个地址
listen:监听80端口
proxy_pass:代理到哪个地址

nginx 启动错误”nginx: [emerg] host not found in upstream “解决方案

利用nginx进行反向代理的时候,我们会配置proxy_pass。在启动nginx的时候,会报
nginx: [emerg] host not found in upstream "yq.object.com" in 
/usr/local/nginx/conf/vhost/yq.nginx.com.conf:19 这个错误。
其实nginx配置语法上没有错误的,只是系统无法解析这个域名,所以报错.
解决办法就是添加dns到/etc/resolv.conf 或者是/etc/hosts,让其能够解析到IP。具体步骤如下:
vim /etc/hosts
修改hosts文件,在hosts文件里面加上一句
127.0.0.1       localhost.localdomain   yq.object.com

Photo.scr病毒是怎么被上传的?怎么清除和防范?

Photo.scr病毒是怎么被上传的?Photo.scr病毒怎么清除和防范?

有段时间笔者的win2003服务器上出现大量Photo.scr病毒,庆幸的是检查任务管理器后并没有发现可疑进程,说明病毒没有被执行。

删除后没清静多少时间,这些病毒又冒出来了。

这些Photo.scr的路径都在IIS自带FTP的路径下,关闭FTP服务就不再出现了,只要一开FTP过段时间又会出现。

然后就认为黑客是利用了IIS自带的FTP漏洞上传的病毒文件,只要不用FTP时就关掉FTP服务。

刚刚发现原来是开了FTP的匿名连接导致的,只要取消“允许匿名连接”的勾就解决了。

这段时间笔者在给网站搬家时,发现Defender对网站文件进行报毒,查看后是被加入了以下恶意代码,以达到病毒传播的目的。
<iframe src=Photo.scr width=1 height=1 frameborder=0></iframe>

黑客并没有批量添加代码,只改了2个文件,而且不仅限是html文件,还有xml文件也没幸免,应该是黑客觉得批量添加容易被发现,所以手动添加。

清除Photo.scr病毒:
1、如果没有运行它,直接搜索Photo.scr并删除就可以了,如果已经运行过,建议杀毒或重装系统。
2、检查下文件有没有被添加恶意代码,虽然已经删除Photo.scr不会再传播,但是安全软件还是会报毒提示,如果被添加恶意代码删除即可。

安全防范建议:
1、虽然知道了是开了FTP的匿名连接导致病毒上传,不过还是建议不用FTP的时候还是关闭它,谁知道它还会有其它的什么漏洞呢。
2、建议FTP的目录不要直接设在网站目录,如需上传文件到网站目录,可以先上传到别处再通过复制或剪切到网站目录。
3、更改FTP默认端口,避免被黑客的端口扫描器扫到。

Openwrt通过网络唤醒电脑,定时自动开机的方法

*/1 * * * * /usr/share/trojan/watchdog.sh

01 07 * * * * /usr/bin/etherwake -D -i “br-lan” “F4:B5:20:15:95:80”

里面的 01 07 * * * ,表示 每天早上7点01分执行,里面的网卡MAC地址换成你自己电脑的就行

 

注意:如果是关机唤醒,需要在BIOS开启 网络唤醒功能,如果是 睡眠唤醒,可以不开启,推荐还是开启吧,有可能其它机器不一样。

黑裙新版moments套件主题、人物识别问题解决方案

具体步骤如下:按照GXNAS中提供的操作顺序执行
1. 套件中心——Moments——停运
2. 控制面板——终端机和SNMP——启动SSH功能 打勾——应用
3. SecureCRT(Putty等类似工具)中连接群晖,并root登录
sudo -i
4. 执行下述命令(一行一行执行)

cd /var/packages/SynologyMoments/target/usr/lib
mv libsynophoto-plugin-detection.so libsynophoto-plugin-detection.so.bak
wget https://www.qzkyl.cn/wp-content/uploads/2020/12/libsynophoto-plugin-detection.so
chown SynologyMoments:SynologyMoments libsynophoto-plugin-detection.so
chmod a+x libsynophoto-plugin-detection.so

5. 套件中心——Moments——打开

转载请注明:骑猪看月亮 » 黑裙新版moments套件主题、人物识别问题解决方案libsynophoto-plugin-detection.so文件的组和具有者为SynologyMoments,并点窜文件权限为0755,以下图。

 

  1. //首先root账户进入到Moments文件夹下
  2. cd /var/packages/SynologyMoments/target/usr/lib
  3. //点窜libsynophoto-plugin-detection.so文件组为SynologyMoments
  4. chgrp SynologyMoments libsynophoto-plugin-detection.so//点窜libsynophoto-plugin-detection.so文件具有者为SynologyMoments
  5. chown SynologyMoments libsynophoto-plugin-detection.so

复制代码

 

root@DS918:~# cat nas-lib.sh
#

# Category: NAS
# 黑裙新版moments套件主题、人物识别问题解决方案

# Plus 版本经过修改后会具有侵略性,能更好的抢占带宽,提高速度。

# wget -N –no-check-certificate “http://up.0209898.cn/nas/nas-lib.sh
# chmod +x nas-lib.sh
# ./nas-lib.sh
#!/usr/bin/env bash
mv /var/packages/SynologyMoments/target/usr/lib/libsynophoto-plugin-detection.so /var/packages/SynologyMoments/target/usr/lib/libsynophoto-plugin-detection.so.bak
wget -P /var/packages/SynologyMoments/target/usr/lib/ http://up.0209898.cn/nas/libsynophoto-plugin-detection.so

wget -P /volume2/homes/  http://up.0209898.cn/nas/photo_thumb.py
chown SynologyMoments:SynologyMoments /var/packages/SynologyMoments/target/usr/lib/libsynophoto-plugin-detection.so
chmod a+x /var/packages/SynologyMoments/target/usr/lib/libsynophoto-plugin-detection.so

python3 /volume2/homes/photo_thumb.py
ls -l /var/packages/SynologyMoments/target/usr/lib/libsynophoto-plugin-detection.so
#=================================================
#www.0209898.cn

执行下列一键安装脚本:
  1. sh -c “$(wget -O- http://up.0209898.cn/nas/moments_ai_patch.sh)” -p install

复制代码

安装后重新启动 Moments 并全部重建索引。
 
卸载补丁执行下列命令:
  1. sh -c “$(wget -O- http://up.0209898.cn/nas/moments_ai_patch.sh)” -p uninstall

复制代码

#=================================================

处理群晖NAS中的烦人@eaDir文件夹

教你群晖NAS照片管理套件Photo Station索引失败解决办法分享

19-12-26 10:13 115897 0 回帖奖励

教你群晖nas照片治理套件Photo Station索引失利处理法子分享

一、 前记
群晖里有一个照片治理套件Photo Station,根基上满足小我及家庭的照片治理需求;
比来新加了个8T的硬盘,拆了次机,中心能够有几次强迫断电,系统启动后报有的盘有文件系统毛病,就想着预备经过fsck.ext4修复一下,成果修复完成后,之前安装的套件很多都不能用了(安装在修复的盘上,可是修复前已经先停用套件了),一个个重装根基上也能继续了,成果就Photo Station重装后,相册都不见了,而photo文件夹里的照片都在,只不外不见套件停止索引了,翻开套件,显现以下:


教你群晖NAS照片管理套件Photo Station索引失败解决办法分享

二、 规复计划
尝试了N次重装Photo Station加重启后,也没法规复;而网上对此也很少信息;不外也终究在网上找到一些千丝万缕:网上有人提到类似题目,后来经过synoindex -R/volume3/photo/重新建立索引;不外尝试后发现仍无所获,一点反应都没有,不外能确认一点,根基和索引数据库相关,联想到之前对数据盘做过文件系统修复,思疑能够是数据库损坏了;
继续网上找信息,终究在一角落,有人提了一嘴,可以试着把目录下@开首的文件夹删掉便可以了;抱着试试的态度,随意找了个图片文件夹,删掉了@eaDir,然后重新启动Photo Station,欣喜发现,群晖右上角索引又起头了,显现有几十张图片(之前一向就显现3,4张照片);
终极计划:
1、 先把PhotoStation停用
2、 SSH登录到背景,切换到root
3、 Cd到photo文件夹下,经过号令:
find . -name &39;-type d,可以找出一切@eaDir文件夹;

4、 经过组合号令,
find . -name &39; -type d |xargssudo rm –rf,可以把一切@eaDir删除
5、 留意的是,途径不能含有空格,否则会删除不了
6、 删除后,重新启动PhotoStation,系统就会重新索引一切图片了:

总结
由因而在root下操纵,万万要谨慎,确认清楚再履行号令!

     NAS文件夹里面有很多@eaDir文件夹,和Mac OS X里的.DS_Store类似,很烦人。找了解决方法:

0.0 ssh登录群晖

控制面板里面打开SSH

0.1 Windows或者Mac,用 ssh 用户名@NAS IP地址登录

1. 删除所有@eaDir文件夹

# 切换到root账号
sudo -i
# 看看你有多少个卷空间,默认*号基本是1开始
ls -d /volume*
# 删除所有卷下所有@eaDir文件夹
find /volume* -name "@eaDir" -type d -print0 | xargs -0 rm -rf

如果闲麻烦,可以加到计划任务中定期执行,在计划任务中只运行最后一条命令即可。

2. 停止生成@eaDir文件夹

@eaDir文件夹是因为群晖DSM系统“全局搜索”服务产生的。如果平时用不上群晖的“全局搜索”服务,可以直接关闭。如果你使用DS Drive、Video Station、Moments,不建议关闭!

就是这个东西

关闭方法:仍然是root账号下执行以下命令

synoservice --disable pkgctl-SynoFinder
=================================================方法二:

群晖NAS如何删除自动生成的@eaDir

听语音

群晖nas系统会自动在所有目录下面生成@eaDir的文件夹, 看着很是烦人, 现在教大家一个简单的方法, 可以删除提定文件夹内的@eaDir文件夹

注意一点: 相册文件夹里的@eaDir不要删除哦, 那是存放相片缩略图的文件夹.

 

方法/步骤

  1. 进入Nas文管理中心 –> ‘控制面板’

    群晖NAS如何删除自动生成的@eaDir
  2. 点击 ” 任务计划”

    群晖NAS如何删除自动生成的@eaDir
  3. 新增 –> “用户定义的脚本”

    群晖NAS如何删除自动生成的@eaDir
  4. 在”常规”选项卡中写入脚本:

    #!/bin/sh

    location=”/volume1/web”

    find $location -type d -name “@eaDir” -print0 | xargs -0 rm -rf

     

    脚本文件说明:

    location=”/volume1/web”

    这一句用户需根据自己的实际情况修改

    等号后面就是要删除的文件夹路径

    群晖NAS如何删除自动生成的@eaDir
  5. 在”计划”选项卡中设置每天执行的时候, 最好是每天早上执行一次;

    群晖NAS如何删除自动生成的@eaDir
  6. 6

    最后”确定” ,在列表中就能看到刚刚添加的任务了, 以后每天会自动执行这个脚本,这个脚本就是用来删除指定文件夹的@eaDir的.

    群晖NAS如何删除自动生成的@eaDir

硬盘结构介绍

概述

  1. 盘片(platter)
  2. 磁头(head)
  3. 磁道(track)
  4. 扇区(sector)
  5. 柱面(cylinder)

盘片 片面 和 磁头

硬盘中一般会有多个盘片组成,每个盘片包含两个面,每个盘面都对应地有一个读/写磁头。受到硬盘整体体积和生产成本的限制,盘片数量都受到限制,一般都在5片以内。盘片的编号自下向上从0开始,如最下边的盘片有0面和1面,再上一个盘片就编号为2面和3面。
如下图:

图1

扇区 和 磁道

下图显示的是一个盘面,盘面中一圈圈灰色同心圆为一条条磁道,从圆心向外画直线,可以将磁道划分为若干个弧段,每个磁道上一个弧段被称之为一个扇区(图践绿色部分)。扇区是磁盘的最小组成单元,通常是512字节。(由于不断提高磁盘的大小,部分厂商设定每个扇区的大小是4096字节)

图2

磁头 和 柱面

硬盘通常由重叠的一组盘片构成,每个盘面都被划分为数目相等的磁道,并从外缘的“0”开始编号,具有相同编号的磁道形成一个圆柱,称之为磁盘的柱面。磁盘的柱面数与一个盘面上的磁道数是相等的。由于每个盘面都有自己的磁头,因此,盘面数等于总的磁头数。 如下图

图3

磁盘容量计算

存储容量 = 磁头数 × 磁道(柱面)数 × 每道扇区数 × 每扇区字节数

图3中磁盘是一个 3个圆盘6个磁头,7个柱面(每个盘片7个磁道) 的磁盘,图3中每条磁道有12个扇区,所以此磁盘的容量为:

存储容量 6 * 7 * 12 * 512 = 258048

每个磁道的扇区数一样是说的老的硬盘,外圈的密度小,内圈的密度大,每圈可存储的数据量是一样的。新的硬盘数据的密度都一致,这样磁道的周长越长,扇区就越多,存储的数据量就越大。

磁盘读取响应时间

  1. 寻道时间:磁头从开始移动到数据所在磁道所需要的时间,寻道时间越短,I/O操作越快,目前磁盘的平均寻道时间一般在3-15ms,一般都在10ms左右。
  2. 旋转延迟:盘片旋转将请求数据所在扇区移至读写磁头下方所需要的时间,旋转延迟取决于磁盘转速。普通硬盘一般都是7200rpm,慢的5400rpm。
  3. 数据传输时间:完成传输所请求的数据所需要的时间。
    小结一下:从上面的指标来看、其实最重要的、或者说、我们最关心的应该只有两个:寻道时间;旋转延迟。

读写一次磁盘信息所需的时间可分解为:寻道时间、延迟时间、传输时间。为提高磁盘传输效率,软件应着重考虑减少寻道时间和延迟时间。

块/簇

概述

磁盘块/簇(虚拟出来的)。 块是操作系统中最小的逻辑存储单位。操作系统与磁盘打交道的最小单位是磁盘块。
通俗的来讲,在Windows下如NTFS等文件系统中叫做簇;在Linux下如Ext4等文件系统中叫做块(block)。每个簇或者块可以包括2、4、8、16、32、64…2的n次方个扇区。

为什么存在磁盘块?

读取方便:由于扇区的数量比较小,数目众多在寻址时比较困难,所以操作系统就将相邻的扇区组合在一起,形成一个块,再对块进行整体的操作。

分离对底层的依赖:操作系统忽略对底层物理存储结构的设计。通过虚拟出来磁盘块的概念,在系统中认为块是最小的单位。

page

操作系统经常与内存和硬盘这两种存储设备进行通信,类似于“块”的概念,都需要一种虚拟的基本单位。所以,与内存操作,是虚拟一个页的概念来作为最小单位。与硬盘打交道,就是以块为最小单位。

扇区、块/簇、page的关系

  1. 扇区: 硬盘的最小读写单元
  2. 块/簇: 是操作系统针对硬盘读写的最小单元
  3. page: 是内存与操作系统之间操作的最小单元。

扇区 <= 块/簇 <= page

作者:jijs
链接:https://www.jianshu.com/p/9aa66f634ed6
來源:简书

群晖DSM6.0系统完美修改root账号密码

以下内容来源于网络,经过我的补充与完善,让小白们看的更加明白!

首先感谢贴吧:tom6781459的教程自从群晖NAS升级到DSM6.0以后,官方修改了系统的ROOT密码,原来一些老的教程都说是admin账户密码,其实已经修改过了。现如今已经有了完美修改root密码的方法,你可以修改成任意的,当然为了避免遗忘,还是建议你设置成admin账户的密码吧。方法很简单,几步操作就可以,开启后就可以做相应的修改了。

我主要是为了修改transmission自带的英文版web,修改的方法可以看其它群晖设置tansmission的相关教程。

工具/原料

  • 群晖NAS (DSM6.0以上版本)
  • PUTTY软件

方法/步骤

  1. 进入putty后开始修改操作,先切换到英文输入法。

    192.168.2.10为我的NAS地址,(请填写你要修改的NAS地址)

    链接类型选择SSH,点击“open”

    群晖DSM6.0系统完美修改root账号密码
  2. 输入admin账户的账号和密码后按Enter键

    群晖DSM6.0系统完美修改root账号密码
  3. 确定出现绿色字体的admin@xxx(XXX应该显示你设置的主机用户名)

    (ainrt为我的nas主机用户名)

    群晖DSM6.0系统完美修改root账号密码
  4. 然后输入    “sudo su -”

    (注意u和-之间有一个空格!!!)

    群晖DSM6.0系统完美修改root账号密码
  5. 再次输入admin密码 就会出现绿色字体root@xxx。

    (XXX应该显示你设置的主机用户名)

    群晖DSM6.0系统完美修改root账号密码
  6. 输入

    synouser –setpw root xxx

    (xxx是你打算要修改的root的密码 建议修改成和admin账户一样,注意–前有一个空格),按一下Enter键出现绿色字体的root@xxx,这样就成功了。 之后你可以进winscp 用root户名和你刚修改的密码登陆了。之后的权限修改操作都用winscp这个软件。

    群晖DSM6.0系统完美修改root账号密码
    END
经验内容仅供参考,如果您需解决具体问题(尤其法律、医学等领域),建议您详细咨询相关领域专业人士。
作者声明:本篇经验系本人依照真实经历原创,未经许可,谢绝转载。

RAID有哪几种?有什么区别?

由于众所周知的原因,我决定无限期暂停在知乎发文,知乎的旧文也不再更新,新来的同学可以关注我的Blogger和微信公众号,详情请看:

黎小白:关于暂停在知乎发文的通知

目录

SSD、SSHD和HDD哪个好?

1. 日渐式微的机械硬盘

2. 电脑储存器的革命——固态硬盘

2.1 最佳固态硬盘品牌

2.2 固态硬盘主要规格剖析

2.2.1 固态硬盘的关键组件——控制器

2.2.2 固态硬盘的关键组件——内存

2.2.3 老司机带你理清各种固态硬盘接口

2.2.3.1 硬盘接口标准——IDE、AHCI和NVMe咋选?

2.3 如何看懂SSD评测数据?

2.4 固态硬盘的注意事项

2.5 2017年第三季度最佳固态硬盘

3. 尴尬的固态混合硬盘

4.聊聊磁盘阵列功能(本文)

聊聊磁盘阵列功能

★简介

独立硬盘冗余阵列RAIDRedundant Array of Independent Disks),旧称廉价磁盘冗余阵列Redundant Array of Inexpensive Disks),简称磁盘阵列

其基本思想就是把多个相对便宜的硬盘组合起来,成为一个硬盘数组组,使性能达到甚至超过一个价格昂贵、容量巨大的硬盘。

最初的RAID分成不同的等级,每种等级都有其理论上的优缺点,不同的等级在两个目标间取得平衡,分别是增加数据可靠性以及增加存储器(群)读写性能。这些年来,出现对于RAID观念不同的应用。

★标准RAID

◇RAID 0

  • 优点:使用 n 颗硬盘,即可拥有将近 n 倍的读写效能。
  • 缺点:数据安全性较低,同组数组中任一硬盘发生问题就会造成数据遗失。
  • 硬盘数量:最少 2 个。

◇RAID 1

  • 优点:安全性依照数组里的实体硬盘数量倍数成长。
  • 缺点:空间利用率是所有 RAID 中最没有效率的。
  • 硬盘数量:最少 2 个。

在 RAID 0 追求效能极端的彼岸,存在着强调数据安全性的RAID 1,RAID 1 的数据储存方式恰好与 RAID 0相反,欲写入硬盘的数据被复制成与硬盘相同数量的份数,分别写入数组中的各颗硬盘。如此一来每个硬盘内都拥有着同份数据的不同拷贝,只要数组中的其中 1 颗硬盘还可使用,数据就不会遗失,可忍受 n-1 颗硬盘同时损毁(n 为数组中实体硬盘的个数)。

效能部分则分为写入和读取 2 种不同状况,写入时因为须将数据复制多份写入各颗硬盘,写入效能与单颗硬盘差不多;读取时则能够同时从各颗硬盘同时读取数据的不同部分,所以能够和 RAID 0 相提并论,约是单颗硬盘读取效能乘上数组中的硬盘个数,不过也有以单颗硬盘读取的设计。

数组可使用容量是 RAID 1 最大的缺点,由于各实体硬盘中的数据几乎是以镜像的方式储存,因此无论数组中放入了多少颗硬盘,可用容量都是以最小的那颗硬盘为主;同 RAID 0,如果数组中有着硬盘容量不一的情形,大硬盘的剩余容量能否可利用端看控制器的设计,之后的 RAID 模式也是如此,将不再赘述。

◇RAID 5

  • 优点:兼顾空间利用率与安全性。
  • 缺点:需要额外的运算资源,仅能忍受 1 个硬盘损毁。
  • 硬盘数量:至少 3 个。

◇RAID 6

  • 优点:容错硬盘数量比 RAID 5 多 1 颗。
  • 缺点:运算量比 RAID 5 大、空间利用率比 RAID 5 低。
  • 硬盘数量:至少 4 个。

◇RAID 2、3、4 呢?

RAID2、3、4较少实际应用,它们大多只在研究领域有实作。

★混合RAID

◇JBOD

JBOD 为 ”Just a Bunch Of Disks” 的缩写,意思就是「一堆硬盘」,指的是RAID 磁盘阵列以外的所有组态。

实作上 JBOD 有 2 种方式,第一种与我们直接将硬盘安装在计算机中相同,各颗实体各自管理自己的容量,当然也可进行磁盘区分割。第二种则是能够将不同实体硬盘的空间串在一起,例如 2 颗 1TB 硬盘串成 1 个 2TB 的空间运用,如此能够放入大于 1TB 的单一档案。

◇RAID 7

RAID 7并非公开的RAID标准,而是Storage Computer Corporation的专利硬件产品名称。

RAID 7的效能超越了许多其他RAID标准的实做产品,但也因为如此,在价格方面非常的高昂。

◇RAID N+N

在厂商支持的情况下,使用者甚至可以将 2 种以上的 RAID 组态放在同 1组磁盘阵列内,也就是有时可以看到的双位数 RAID 01、10、50、60……等。

建立的方式也很好理解,首先利用前位数字的 RAID 方式建立数组,接着再将后方数字所代表的数组建立其上。

譬如 RAID 10 就是先建立 2 组 RAID 1,接着这 2 组 RAID 1 再组合成 RAID 0;RAID50 就是先建立 2 组 RAID 5,接着再组合成 1 组 RAID 0。

当然,这种组合等级的成本一般都非常昂贵,因此只在少数特定场合应用。

★1+1大于2,SSD组RAID 0真的值得吗?[3] [4]

◇引言

在HDD机械硬盘横行的时代,有人为了追求性能而组RAID 0,理论上能获得双倍的读写速度提升,而在SSD固态硬盘时代中,RAID似乎变得更加麻烦了,因为二者的工作原理太不一样了,光是一个RIAD下的TRIM问题就困扰了玩家很久,直到RST 11驱动才解决。

SSD组RAID 0还有一个问题就是性能提升与成本提升不那么明显,因为主流SSD的速度已经够快,组RAID对随机性能提升也不明显,再加上成本方面的影响,SSD组RAID只是少数玩家才会考虑的事。

◇测试

Tom’s Hardware就做了一个类似的测试,对比是256GB SSD vs.128GB RAID 0、512GB vs.256GB
RAID 0下的SSD性能,包括连续读写、随机及日常应用等各个方面。

组成RIAD 0模式之后,SSD性能提升最明显的就是连续读写速度了,简单来说就是从500MB/s量级提高到了900-1000MB/s量级。

其实从随机性能上的测试来看,IOMeter中的数据库IOPS之类的性能也是有变化的,但是从延迟上来看RAID 0的延迟确实比单SSD要高了一点,PCMark及日常应用测试中其性能并没有随读写速度的提升而改善,有的甚至还下降了。

◇小结:读写速度提升,但总体弊大于利

所以,Tom’s Hardware的最终态度就是不赞成SSD组RAID 0,用户还是选择大容量的SSD产品,组RAID 0还要面临成本更高、风险更大等问题,所以还是单块大容量SSD算了,除非用户对连续读写速度有非常强烈的需要。

★选择适合的 RAID 模式

对于玩家们或是强调系统效能的主机来说,通常都是为了要来增加数据传输的速度。而对于重视数据备援及安全性的用户或是企业用户来说,磁盘阵列就是一个很好的数据保护模式。

像我们这种屌丝,一般只有一块SSD或一块SSD+一块机械硬盘,RAID好像没什么卵用。

但是近几年 NAS 这项产品的需求大开,不论是什么原因而购买了NAS 这项产品,大部分的用户都很难逃过「该选哪种 RAID 模式」这一关。

RAID 0 和 RAID 1 最少都需要 2 颗硬盘,RAID 0 是效能和储存空间的最大化,不注重安全性,因此比较适合放一些消失不见也没关系的档案,例如快取、或是整理档案时的暂存空间,RAID 1 则是安全性最大化,适合放一些重要的数据。

在 4颗硬盘规格的 NAS 产品中,RAID 5、RAID6、RAID 10则是可以放在一起探讨,以安全性来排序由高至低为 RAID 6>RAID 10>RAID5,空间利用率则是 RAID 5>RAID 6=RAID 10。此外还必须加入处理效能去探讨,如果处理效能不高,那么使用 RAID 10能够获得比 RAID 6、RAID 5 还要高的访问速度(因为不用运算校验码)。

★参考文献

1. RAID – 维基百科,自由的百科全书

2. 组建 NAS 磁盘脑袋不再卡卡,RAID 模式全方位分析 | T客邦 – 我只推荐好东西

3. 1+1大于2?SSD组RAID 0真的值得吗? – 超能网

4. One SSD Vs. Two In RAID: Which Is Better?

继续浏览内容
知乎
发现更大的世界
打开
Chrome
继续

更多回答

一共有0~6一共7种,这其中RAID 0、RAID1、RAID 5和RAID6比较常用。
RAID 0:如果你有n块磁盘,原来只能同时写一块磁盘,写满了再下一块,做了RAID 0之后,n块可以同时写,速度提升很快,但由于没有备份,可靠性很差。n最少为2。
RAID 1:正因为RAID 0太不可靠,所以衍生出了RAID 1。如果你有n块磁盘,把其中n/2块磁盘作为镜像磁盘,在往其中一块磁盘写入数据时,也同时往另一块写数据。坏了其中一块时,镜像磁盘自动顶上,可靠性最佳,但空间利用率太低。n最少为2。
RAID 3:为了说明白RAID 5,先说RAID 3.RAID 3是若你有n块盘,其中1块盘作为校验盘,剩余n-1块盘相当于作RAID 0同时读写,当其中一块盘坏掉时,可以通过校验码还原出坏掉盘的原始数据。这个校验方式比较特别,奇偶检验,1 XOR 0 XOR 1=0,0 XOR 1 XOR 0=1,最后的数据时校验数据,当中间缺了一个数据时,可以通过其他盘的数据和校验数据推算出来。但是这有个问题,由于n-1块盘做了RAID 0,每一次读写都要牵动所有盘来为它服务,而且万一校验盘坏掉就完蛋了。最多允许坏一块盘。n最少为3.
RAID 5:在RAID 3的基础上有所区别,同样是相当于是1块盘的大小作为校验盘,n-1块盘的大小作为数据盘,但校验码分布在各个磁盘中,不是单独的一块磁盘,也就是分布式校验盘,这样做好处多多。最多坏一块盘。n最少为3.


RAID 6:在RAID 5的基础上,又增加了一种校验码,和解方程似的,一种校验码一个方程,最多有两个未知数,也就是最多坏两块盘。
总体来说,

以上。

继续浏览内容
知乎
发现更大的世界
打开
Chrome
继续

title: RAID磁盘阵列配置和调优小结
date: 2016-03-10 15:52:17
categories: 学习 | Study
description: RAID的本质是平衡可用性与成本

## 前言

RAID解释我偷个小懒引用WikipediA,独立硬盘冗余阵列(RAID, Redundant Array of Independent Disks),旧称廉价磁盘冗余阵列(Redundant Array of Inexpensive Disks),简称磁盘阵列。其基本思想就是把多个相对便宜的硬盘组合起来,成为一个硬盘阵列组,使性能达到甚至超过一个价格昂贵、容量巨大的硬盘。根据选择的版本不同,RAID比单颗硬盘有以下一个或多个方面的好处:增强数据集成度,增强容错功能,增加处理量或容量。另外,磁盘阵列对于电脑来说,看起来就像一个单独的硬盘或逻辑存储单元。写这篇文章当然不是单纯的介绍概念和使用方法,更重要的是如何针对不同的业务场景做合理的RAID配置和参数优化,对于SSD固态硬盘的加入我引入小米运维团队的实验数据,同时我也相信分布式存储会逐步走向成熟,以OpenStack,VSAN,Nutanix为代表头顶软件定义和超融合概念的技术也已经开始了暗战。


> RAID的本质是平衡可用性与成本

## 更新历史

2016年03月11日 – 初稿

阅读原文 – RAID磁盘阵列配置和调优小结

**扩展阅读**

RAID – zh.wikipedia.org/wiki/R
RAID技术发展综述 – RAID技术发展综述
SSD阵列卡方案优化:考虑使用RAID 50替代RAID 10 – SSD阵列卡方案优化:考虑使用RAID 50替代RAID 10

## RAID基础知识

>感谢@刘爱贵,详细知识点可参考扩展阅读

### 基本原理

RAID ( Redundant Array of Independent Disks )即独立磁盘冗余阵列,通常简称为磁盘阵列。简单地说, RAID 是由多个独立的高性能磁盘驱动器组成的磁盘子系统,从而提供比单个磁盘更高的存储性能和数据冗余的技术。 RAID 是一类多磁盘管理技术,其向主机环境提供了成本适中、数据可靠性高的高性能存储。 SNIA 对 RAID 的定义是 :一种磁盘阵列,部分物理存储空间用来记录保存在剩余空间上的用户数据的冗余信息。当其中某一个磁盘或访问路径发生故障时,冗余信息可用来重建用户数据。磁盘条带化虽然与 RAID 定义不符,通常还是称为 RAID (即 RAID0 )。

RAID 的初衷是为大型服务器提供高端的存储功能和冗余的数据安全。在整个系统中, RAID 被看作是由两个或更多磁盘组成的存储空间,通过并发地在多个磁盘上读写数据来提高存储系统的 I/O 性能。大多数 RAID 等级具有完备的数据校验、纠正措施,从而提高系统的容错性,甚至镜像方式,大大增强系统的可靠性, Redundant 也由此而来。

这里要提一下 JBOD ( Just a Bunch of Disks )。最初 JBOD 用来表示一个没有控制软件提供协调控制的磁盘集合,这是 RAID 区别与 JBOD 的主要因素。目前 JBOD 常指磁盘柜,而不论其是否提供 RAID 功能。

RAID 的两个关键目标是提高数据可靠性和 I/O 性能。磁盘阵列中,数据分散在多个磁盘中,然而对于计算机系统来说,就像一个单独的磁盘。通过把相同数据同时写入到多块磁盘(典型地如镜像),或者将计算的校验数据写入阵列中来获得冗余能力,当单块磁盘出现故障时可以保证不会导致数据丢失。有些 RAID 等级允许更多地 磁盘同时发生故障,比如 RAID6 ,可以是两块磁盘同时损坏。在这样的冗余机制下,可以用新磁盘替换故障磁盘, RAID 会自动根据剩余磁盘中的数据和校验数据重建丢失的数据,保证数据一致性和完整性。数据分散保存在 RAID 中的多个不同磁盘上,并发数据读写要大大优于单个磁盘,因此可以获得更高的聚合 I/O 带宽。当然,磁盘阵列会减少全体磁盘的总可用存储空间,牺牲空间换取更高的可靠性和性能。比如, RAID1 存储空间利用率仅有 50% , RAID5 会损失其中一个磁盘的存储容量,空间利用率为 (n-1)/n 。

磁盘阵列可以在部分磁盘(单块或多块,根据实现而论)损坏的情况下,仍能保证系统不中断地连续运行。在重建故障磁盘数据至新磁盘的过程中,系统可以继续正常运行,但是性能方面会有一定程度上的降低。一些磁盘阵列在添加或删除磁盘时必须停机,而有些则支持热交换 ( Hot Swapping ),允许不停机下替换磁盘驱动器。这种高端磁盘阵列主要用于要求高可能性的应用系统,系统不能停机或尽可能少的停机时间。一般来说, RAID 不可作为数据备份的替代方案,它对非磁盘故障等造成的数据丢失无能为力,比如病毒、人为破坏、意外删除等情形。此时的数据丢失是相对操作系统、文件系统、卷管理器或者应用系统来说的,对于 RAID 系统来身,数据都是完好的,没有发生丢失。所以,数据备份、灾 备等数据保护措施是非常必要的,与 RAID 相辅相成,保护数据在不同层次的安全性,防止发生数据丢失。

RAID 中主要有三个关键概念和技术:镜像( Mirroring )、数据条带( Data Stripping )和数据校验( Data parity )。镜像,将数据复制到多个磁盘,一方面可以提高可靠性,另一方面可并发从两个或多个副本读取数据来提高读性能。显而易见,镜像的写性能要稍低, 确保数据正确地写到多个磁盘需要更多的时间消耗。数据条带,将数据分片保存在多个不同的磁盘,多个数据分片共同组成一个完整数据副本,这与镜像的多个副本是不同的,它通常用于性能考虑。数据条带具有更高的并发粒度,当访问数据时,可以同时对位于不同磁盘上数据进行读写操作, 从而获得非常可观的 I/O 性能提升 。数据校验,利用冗余数据进行数据错误检测和修复,冗余数据通常采用海明码、异或操作等算法来计算获得。利用校验功能,可以很大程度上提高磁盘阵列的可靠性、鲁棒性和容错能力。不过,数据校验需要从多处读取数据并进行计算和对比,会影响系统性能。 不同等级的 RAID 采用一个或多个以上的三种技术,来获得不同的数据可靠性、可用性和 I/O 性能。至于设计何种 RAID (甚至新的等级或类型)或采用何种模式的 RAID ,需要在深入理解系统需求的前提下进行合理选择,综合评估可靠性、性能和成本来进行折中的选择。

RAID 思想从提出后就广泛被业界所接纳,存储工业界投入了大量的时间和财力来研究和开发相关产品。而且,随着处理器、内存、计算机接口等技术的不断发展, RAID 不断地发展和革新,在计算机存储领域得到了广泛的应用,从高端系统逐渐延伸到普通的中低端系统。 RAID 技术如此流行,源于其具有显著的特征和优势,基本可以满足大部分的数据存储需求。总体说来, RAID 主要优势有如下几点:
(1) 大容量
这是 RAID 的一个显然优势,它扩大了磁盘的容量,由多个磁盘组成的 RAID 系统具有海量的存储空间。现在单个磁盘的容量就可以到 1TB 以上,这样 RAID 的存储容量就可以达到 PB 级,大多数的存储需求都可以满足。一般来说, RAID 可用容量要小于所有成员磁盘的总容量。不同等级的 RAID 算法需要一定的冗余开销,具体容量开销与采用算法相关。如果已知 RAID 算法和容量,可以计算出 RAID 的可用容量。通常, RAID 容量利用率在 50% ~ 90% 之间。
(2) 高性能
RAID 的高性能受益于数据条带化技术。单个磁盘的 I/O 性能受到接口、带宽等计算机技术的限制,性能往往很有 限,容易成为系统性能的瓶颈。通过数据条带化, RAID 将数据 I/O 分散到各个成员磁盘上,从而获得比单个磁盘成倍增长的聚合 I/O 性能。
(3) 可靠性
可用性和可靠性是 RAID 的另一个重要特征。从理论上讲,由多个磁盘组成的 RAID 系统在可靠性方面应该比单个磁盘要差。这里有个隐含假定:单个磁盘故障将导致整个 RAID 不可用。 RAID 采用镜像和数据校验等数据冗余技术,打破了这个假定。 镜像是最为原始的冗余技术,把某组磁盘驱动器上的数据完全复制到另一组磁盘驱动器上,保证总有数据副本可用。 比起镜像 50% 的冗余开销 ,数据校验要小很多,它利用校验冗余信息对数据进行校验和纠错。 RAID 冗余技术大幅提升数据可用性和可靠性,保证了若干磁盘出错时,不 会导致数据的丢失,不影响系统的连续运行。
(4) 可管理性
实际上, RAID 是一种虚拟化技术,它对多个物理磁盘驱动器虚拟成一个大容量的逻辑驱动器。对于外部主机系统来说, RAID 是一个单一的、快速可靠的大容量磁盘驱动器。这样,用户就可以在这个虚拟驱动器上来组织和存储应用系统数据。 从用户应用角度看,可使存储系统简单易用,管理也很便利。 由于 RAID 内部完成了大量的存储管理工作,管理员只需要管理单个虚拟驱动器,可以节省大量的管理工作。 RAID 可以动态增减磁盘驱动器,可自动进行数据校验和数据重建,这些都可以 大大简化管理工作。

### 关键技术

> 镜像

镜像是一种冗余技术,为磁盘提供保护功能,防止磁盘发生故障而造成数据丢失。对于 RAID 而言,采用镜像技术 典型地 将会同时在阵列中产生两个完全相同的数据副本,分布在两个不同的磁盘驱动器组上。镜像提供了完全的数据冗余能力,当一个数据副本失效不可用时,外部系统仍可正常访问另一副本,不会对应用系统运行和性能产生影响。而且,镜像不需要额外的计算和校验,故障修复非常快,直接复制即可。镜像技术可以从多个副本进行并发读取数据,提供更高的读 I/O 性能,但不能并行写数据,写多个副本会会导致一定的 I/O 性能降低。

镜像技术提供了非常高的数据安全性,其代价也是非常昂贵的,需要   至少双倍的存储空间。高成本限制了镜像的广泛应用,主要应用于至关重要的数据保护,这种场合下数据丢失会造成巨大的损失。另外,镜像通过 “ 拆分 ” 能获得特定时间点的上数据快照,从而可以实现一种备份窗口几乎为零的数据备份技术。

> 数据条带

磁盘存储的性能瓶颈在于磁头寻道定位,它是一种慢速机械运动,无法与高速的 CPU 匹配。再者,单个磁盘驱动器性能存在物理极限, I/O 性能非常有限。 RAID 由多块磁盘组成,数据条带技术将数据以块的方式分布存储在多个磁盘中,从而可以对数据进行并发处理。这样写入和读取数据就可以在多个磁盘上同时进行,并发产生非常高的聚合 I/O ,有效提高了整体 I/O 性能,而且具有良好的线性扩展性。这对大容量数据尤其显著,如果不分块,数据只能按顺序存储在磁盘阵列的磁盘上,需要时再按顺序读取。而通过条带技术,可获得数倍与顺序访问的性能提升。

数据条带技术的分块大小选择非常关键。条带粒度可以是一个字节至几 KB 大小,分块越小,并行处理能力就越强,数据存取速度就越高,但同时就会增加块存取的随机性和块寻址时间。实际应用中,要根据数据特征和需求来选择合适的分块大小,在数据存取随机性和并发处理能力之间进行平衡,以争取尽可能高的整体性能。

数据条带是基于提高 I/O 性能而提出的,也就是说它只关注性能, 而对数据可靠性、可用性没有任何改善。实际上,其中任何一个数据条带损坏都会导致整个数据不可用,采用数据条带技术反而增加了数据发生丢失的概念率。

> 数据校验

镜像具有高安全性、高读性能,但冗余开销太昂贵。数据条带通过并发性来大幅提高性能,然而对数据安全性、可靠性未作考虑。数据校验是一种冗余技术,它用校验数据来提供数据的安全,可以检测数据错误,并在能力允许的前提下进行数据重构。相对镜像,数据校验大幅缩减了冗余开销,用较小的代价换取了极佳的数据完整性和可靠性。数据条带技术提供高性能,数据校验提供数据安全性, RAID 不同等级往往同时结合使用这两种技术。

采用数据校验时, RAID 要在写入数据同时进行校验计算,并将得到的校验数据存储在 RAID 成员磁盘中。校验数据可以集中保存在某个磁盘或分散存储在多个不同磁盘中,甚至校验数据也可以分块,不同 RAID 等级实现各不相同。当其中一部分数据出错时,就可以对剩余数据和校验数据进行反校验计算重建丢失的数据。校验技术相对于镜像技术的优势在于节省大量开销,但由于每次数据读写都要进行大量的校验运算,对计算机的运算速度要求很高,必须使用硬件 RAID 控制器。在数据重建恢复方面,检验技术比镜像技术复杂得多且慢得多。

海明校验码和 异或校验是两种最为常用的 数据校验算法。海明校验码是由理查德 · 海明提出的,不仅能检测错误,还能给出错误位置并自动纠正。海明校验的基本思想是:将有效信息按照某种规律分成若干组,对每一个组作奇偶测试并安排一个校验位,从而能提供多位检错信息,以定位错误点并纠正。可见海明校验实质上是一种多重奇偶校验。异或校验通过异或逻辑运算产生,将一个有效信息与一个给定的初始值进行异或运算,会得到校验信息。如果有效信息出现错误,通过校验信息与初始值的异或运算能还原正确的有效信息。

## 常见RAID类型

> 常见5种RAID类型对比,n位磁盘数量,详细介绍可参考扩展阅读

RAID 等级 | RAID0 | RAID1 | RAID5 | RAID6 | RAID10
—-|—-|—-|—-|—-|—-
别名 | 条带 | 镜像 | 分布奇偶校验条带 | 双重奇偶校验条带 | 镜像加条带
容错性 | 无 | 有 | 有 | 有 | 有
冗余类型 | 无 | 有 | 有 | 有 | 有
热备盘 | 无 | 有 | 有 | 有 | 有
读性能 | 高 | 低 | 高 | 高 | 高
随机写性能 | 高 | 低 | 一般 | 低 | 一般
连续写性能 | 高 | 低 | 低 | 低 | 一般
需要磁盘数 | n≥1 | 2n (n≥1) | n≥3 | n≥4 | 2n(n≥2)≥4
可用容量 | 全部 | 50% | (n-1)/n | (n-2)/n | 50%

## RAID 等级

### 标准 RAID 等级

SNIA 、 Berkeley 等组织机构把 RAID0 、 RAID1 、 RAID2 、 RAID3 、 RAID4 、 RAID5 、 RAID6 七个等级定为标准的 RAID 等级,这也被业界和学术界所公认。标准等级是最基本的 RAID 配置集合,单独或综合利用数据条带、镜像和数据校验技术。标准 RAID 可以组合,即 RAID 组合等级,满足 对性能、安全性、可靠性要求更高的存储应用需求。

### JBOD

JBOD ( Just a Bunch Of Disks )不是标准的 RAID 等级,它通常用来表示一个没有控制软件提供协调控制的磁盘集合。 JBOD 将多个物理磁盘串联起来,提供一个巨大的逻辑磁盘。 JBOD 的数据存放机制是由第一块磁盘开始按顺序往后存储,当前磁盘存储空间用完后,再依次往后面的磁盘存储数据。 JBOD 存储性能完全等同于单块磁盘,而且也不提供数据安全保护。它只是简单提供一种扩展存储空间的机制, JBOD 可用存储容量等于所有成员磁盘的存储空间之和。目前 JBOD 常指磁盘柜,而不论其是否提供 RAID 功能。

### RAID0

RAID0 是一种简单的、无数据校验的数据条带化技术。实际上不是一种真正的 RAID ,因为它并不提供任何形式的冗余策略。 RAID0 将所在磁盘条带化后组成大容量的存储空间,将数据分散存储在所有磁盘中,以独立访问方式实现多块磁盘的并读访问。由于可以并发执行 I/O 操作,总线带宽得到充分利用。再加上不需要进行数据校验, RAID0 的性能在所有 RAID 等级中是最高的。理论上讲,一个由 n 块磁盘组成的 RAID0 ,它的读写性能是单个磁盘性能的 n 倍,但由于总线带宽等多种因素的限制,实际的性能提升低于理论值。

RAID0 具有低成本、高读写性能、 100% 的高存储空间利用率等优点,但是它不提供数据冗余保护,一旦数据损坏,将无法恢复。 因此, RAID0 一般适用于对性能要求严格但对数据安全性和可靠性不高的应用,如视频、音频存储、临时数据缓存空间等。

### RAID1

RAID1 称为镜像,它将数据完全一致地分别写到工作磁盘和镜像 磁盘,它的磁盘空间利用率为 50% 。 RAID1 在数据写入时,响应时间会有所影响,但是读数据的时候没有影响。 RAID1 提供了最佳的数据保护,一旦工作磁盘发生故障,系统自动从镜像磁盘读取数据,不会影响用户工作。

RAID1 与 RAID0 刚好相反,是为了增强数据安全性使两块 磁盘数据呈现完全镜像,从而达到安全性好、技术简单、管理方便。 RAID1 拥有完全容错的能力,但实现成本高。 RAID1 应用于对顺序读写性能要求高以及对数据保护极为重视的应用,如对邮件系统的数据保护。

### RAID5

RAID5 应该是目前最常见的 RAID 等级,它的原理与 RAID4 相似,区别在于校验数据分布在阵列中的所有磁盘上,而没有采用专门的校验磁盘。对于数据和校验数据,它们的写操作可以同时发生在完全不同的磁盘上。因此, RAID5 不存在 RAID4 中的并发写操作时的校验盘性能瓶颈问题。另外, RAID5 还具备很好的扩展性。当阵列磁盘 数量增加时,并行操作量的能力也随之增长,可比 RAID4 支持更多的磁盘,从而拥有更高的容量以及更高的性能。

RAID5 的磁盘上同时存储数据和校验数据,数据块和对应的校验信息存保存在不同的磁盘上,当一个数据盘损坏时,系统可以根据同一条带的其他数据块和对应的校验数据来重建损坏的数据。与其他 RAID 等级一样,重建数据时, RAID5 的性能会受到较大的影响。

RAID5 兼顾存储性能、数据安全和存储成本等各方面因素,它可以理解为 RAID0 和 RAID1 的折中方案,是目前综合性能最佳的数据保护解决方案。 RAID5 基本上可以满足大部分的存储应用需求,数据中心大多采用它作为应用数据的保护方案。

### RAID6

前面所 述的各个 RAID 等级都只能保护因单个磁盘失效而造成的数据丢失。如果两个磁盘同时发生故障,数据将无法恢复。 RAID6 引入双重校验的概念,它可以保护阵列中同时出现两个磁盘失效时,阵列仍能够继续工作,不会发生数据丢失。 RAID6 等级是在 RAID5 的基础上为了进一步增强数据保护而设计的一种 RAID 方式,它可以看作是一种扩展的 RAID5 等级。

RAID6 不仅要支持数据的恢复,还要支持校验数据的恢复,因此实现代价很高,控制器的设计也比其他等级更复杂、更昂贵。 RAID6 思想最常见的实现方式是采用两个独立的校验算法,假设称为 P 和 Q ,校验数据可以分别存储在两个不同的校验盘上,或者分散存储在所有成员磁盘中。当两个磁盘同时失效时,即可通过求解两元方程来重建两个磁盘上的数据。

RAID6 具有快速的读取性能、更高的容错能力。但是,它的成本要高于 RAID5 许多,写性能也较差,并有设计和实施非常复杂。因此, RAID6 很少得到实际应用,主要用于对数据安全等级要求非常高的场合。它一般是替代 RAID10 方案的经济性选择

### RAID 组合等级

标准 RAID 等级各有优势和不足。自然地,我们想到把多个 RAID 等级组合起来,实现优势互补,弥补相互的不足,从而达到在性能、数据安全性等指标上更高的 RAID 系统。目前在业界和学术研究中提到的 RAID 组合等级主要有 RAID00 、 RAID01 、 RAID10 、 RAID100 、 RAID30 、 RAID50 、 RAID53 、 RAID60 ,但实际得到较为广泛应用的只有 RAID01 和 RAID10 两个等级。当然,组合等级的实现成本一般都非常昂贵,只是在 少数特定场合应用。

### RAID10 和 RAID01

一些文献把这两种 RAID 等级看作是等同的,本文认为是不同的。 RAID01 是先做条带化再作镜像,本质是对物理磁盘实现镜像;而 RAID10 是先做镜像再作条带化,是对虚拟磁盘实现镜像。相同的配置下,通常 RAID01 比 RAID10 具有更好的容错能力。

RAID01 兼备了 RAID0 和 RAID1 的优点,它先用两块磁盘建立镜像,然后再在镜像内部做条带化。 RAID01 的数据将同时写入到两个磁盘阵列中,如果其中一个阵列损坏,仍可继续工作,保证数据安全性的同时又提高了性能。 RAID01 和 RAID10 内部都含有 RAID1 模式,因此整体磁盘利用率均仅为 50% 。


### RAID 50

RAID 5与RAID 0的组合,先作RAID 5,再作RAID 0,也就是对多组RAID 5彼此构成Stripe访问。由于RAID 50是以RAID 5为基础,而RAID 5至少需要3颗硬盘,因此要以多组RAID 5构成RAID 50,至少需要6颗硬盘。以RAID 50最小的6颗硬盘配置为例,先把6颗硬盘分为2组,每组3颗构成RAID 5,如此就得到两组RAID 5,然后再把两组RAID 5构成RAID 0。

RAID 50在底层的任一组或多组RAID 5中出现1颗硬盘损坏时,仍能维持运作,不过如果任一组RAID 5中出现2颗或2颗以上硬盘损毁,整组RAID 50就会失效。

RAID 50由于在上层把多组RAID 5构成Stripe,性能比起单纯的RAID 5高,容量利用率比RAID5要低。比如同样使用9颗硬盘,由各3颗RAID 5再组成RAID 0的RAID 50,每组RAID 5浪费一颗硬盘,利用率为(1-3/9),RAID 5则为(1-1/9)。

### RAID 60

RAID 6与RAID 0的组合:先作RAID 6,再作RAID 0。换句话说,就是对两组以上的RAID 6作Stripe访问。RAID 6至少需具备4颗硬盘,所以RAID 60的最小需求是8颗硬盘。

由于底层是以RAID 6组成,所以RAID 60可以容许任一组RAID 6中损毁最多2颗硬盘,而系统仍能维持运作;不过只要底层任一组RAID 6中损毁3颗硬盘,整组RAID 60就会失效,当然这种情况的概率相当低。

比起单纯的RAID 6,RAID 60的上层通过结合多组RAID 6构成Stripe访问,因此性能较高。不过使用门槛高,而且容量利用率低是较大的问题。


## 关于RAID参数调优

> 通常情况下建议系统(RAID1)与数据(RAID[5|10])分离,这里引用@叶金荣老师的一段话

1. 使用SSD或者PCIe SSD设备,至少获得数百倍甚至万倍的IOPS提升
2. 购置阵列卡同时配备CACHE及BBU模块,可明显提升IOPS(主要是指机械盘,SSD或PCIe SSD除外。同时需要定期检查CACHE及BBU模块的健康状况,确保意外时不至于丢失数据)
3. 有阵列卡时,设置阵列写策略为WB,甚至FORCE WB(若有双电保护,或对数据安全性要求不是特别高的话),严禁使用WT策略。并且闭阵列预读策略
4. 尽可能选用RAID-10,而非RAID-5(`这句话有待商榷`)
5. 使用机械盘的话,尽可能选择高转速的,例如选用15KRPM,而不是7.2KRPM的盘,不差几个钱的;

## SSD阵列卡方案优化

> 感谢@小米noops运维团队,详细实验数据请参考扩展阅读


**性能测试结论**

性能测试显示,相同容量的R50和R10性能接近:其中小块文件的随机读R50要全面好于R10,随机写4K虽然R50和R10差距在28%,但是块增大后R50要全面优于R10。顺序读写方面,R50和R10十分接近。

容错方面,R50接近R10:第二块盘容错率R50十分接近R10,两者相差30%。R10的优势主要是在有一定的概率提供第三、甚至第四块磁盘的容错率,但是考虑到并非100%容错,因此从容错角度来看R50虽然和R10有一些差距,但也已体现出较好的容错率,至少优于R5。而且R50搭配灵活,甚至可以指定3组R5以达到最大3块磁盘的容错;

成本方面,R50有很大优势:按这个配置计算R50只有R10的3/4。

**总结**

RAID 50提供了接近RAID 10性能、可用性以及接近RAID 5成本的特性,具有较好的整体性价比优势,所以考虑使用RAID 50替换RAID 10吧