linux下烧U盘镜像

如果你要刻录的是各种官方镜像,而不是WINPE之类的话,一条命令就可以。

dd if=windows.iso of=/dev/sdb

windows.iso是镜像文件的地址,支持但不仅限于ISO文件格式,img之类的其他镜像文件也支持。 而 /dev/sdb则是存储设备地址。请勿照抄,请手动敲一个 fdisk -l确认以下磁盘。

也不要输成/dev/sdb1 ,后面带数字的话,表示的是分区,而不是整块磁盘。而镜像往往是多分区的,你指向到单一分区肯定是不行的。

自行编写Firefox的Ubuntu桌面图标(Linux通用的.desktop)

Ubuntu自带的firefox太旧了,打算换个新的。

但是下载下来的是tar.bz2的包,解压出来后是个文件目录,需要进到目录里执行命令才可以使用。没有图标,不太方便,于是按照资料自己做了个图标。

先进到/usr/share/applications/目录下,touch 一个叫firefox.desktop的文件。然后vim打开,添加以下内容:

[Desktop Entry]                 #desktop文件头,表示其为Desktop Entry文件
Name = Firefox                  #程序名称
Comment = this is firefox       #程序描述(可选)
Exec = /opt/firefox/firefox     #启动名林
Icon = /opt/firefox/icons/updater.png  #图标路径
Terminal = false   #是否在终端里跑,尽在Application的type下该配置生效
Type = Application  #类型,主要是Application和link
Categories = Application;Network; #菜单栏中的类别

其中可选项可以不写,#号后的注释与#号本身不写

还有一些其他的可选项,补充在下面:

Version = 1.0 # 标明Entry的版本(可选)

GenericName = eclipse # 程序通用名称(可选).

使用matlab的时候,遇到了点小问题,双击启动应用程序APP的图标后,软件出现了加载界面,但是没过多久就闪退了。。。

后面看了下,在exec后面追加个-desktop的选项即可

通过RSA公钥来免密码登录SSH

先生成密钥

ssh-keygen

最好添加个公钥的密码,免得一不小心弄出问题

不指定目录的话,公钥应该就在~/.ssh这个目录下面,文件名为id_rsa.pub

然后复制下公钥内的内容

cat ~/.ssh/id_rsa.pub

复制命令行返回的内容,再远程到需要免密码登录的用户名@服务器上去。

ssh user@server_ip

注意!ssh免密码是跟远程登录的用户绑定的!这个公钥是放到对应用户的.ssh目录下,以后免密码登录也只对这个用户有效。

vim ~/.ssh/authorized_keys

然后把你的之前复制的内容追加到文件底部,没有的话就生成新文件。

再操作下.ssh目录,以免后期被人瞎搞添加了自己的rsa密钥

cd ~/.ssh

chmod 0600 *

完工!

 

crontab 详解

本来想写个crontab详解,后面发现官方自带模板里已经很清楚了。。。

# Example of job definition:
# .—————- minute (0 – 59)
# | .————- hour (0 – 23)
# | | .———- day of month (1 – 31)
# | | | .——- month (1 – 12) OR jan,feb,mar,apr …
# | | | | .—- day of week (0 – 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# | | | | |
# * * * * * user-name command to be executed

 

记一次网站路径设置为777后仍然无法写入的问题

公司的内网论坛突然就没法上传附件了。

查了下,discuz后台一直提示没法正常上传文件,于是检查了下权限,提示我./data 没法写入。

ssh连到linux主机上,发现路径都已经设置为777了,还是一样报无法写入,很是奇怪。。。

后面才意识到,可能是重启后selinux防火墙又跑起来了,于是关闭了下selinux防火墙,一切恢复。。。

VisualSVN Server 设置SVN更新版本后发送邮件

最近公司里提了个需求:

每次一有人往SVN里面commit东西,就立马发邮件通知大家。邮件内容包含svn commit 信息和文件变动信息。

这样来明确责任,免得又有人瞎搞,把改错的代码传了上去。害的别人之前本来能跑通的流程,后面莫名其妙没法跑了,以为自己代码有问题,瞎改了半天。

(吐槽下,把之前的本来正常工作的项目代码,改到一半,改成不能跑了。这样也没什么,关键这些鸟人还传到SVN上去,害的项目组里其他同事受到了影响。这是高度的不负责任!!!好歹你施工到一半的代码,改个文件名保存。别把影响其他人工作,只有稳定能测试通过的版本才应当提交到项目文件上!)

于是准备开始动手,本来的计划是这样:

拿Python写个脚本,然后专门给python分配个用户,这个脚本以这个用户的身份,跑去定期update一下,获取下更新信息与文件改动,如果有更新,就通过python的SMTP发件模块来发送邮件,提醒大家。写完后再把这个脚本添加到crontab,让它每分钟自动跑一次即可。

后面发现,根本没必要这么麻烦,直接一个Post-commit hook就好。这是svn自带的一个钩子功能。可以利用这个去触发一个python脚本,从而把项目更新以邮件形式发送出去。

而我们公司需要加这个功能的SVN,是在Windows Server上跑在VisualSVN Server上的,查了下,连python和邮件模块都不用装,直接几句脚本搞定。

对着VisualSVN 源点一下右键,选属性-》HOOKs-》Post-commit hook 添加以下脚本

“%VISUALSVN_SERVER%\bin\VisualSVNServerHooks.exe” ^
commit-notification “%1” -r %2 ^
–from svn_log@your_company.com –to abc@your_company.com;def@your_company.com ^
–smtp-server mail.your_company.com ^
–smtp-port 25 ^
–smtp-user svn_log@your_company.com ^
–smtp-password yourmail_passwd ^
–no-diffs ^
–encoding utf-8

请把以上代码的:

svn_log@your_company.com    替换成 你设置的SVN更新提醒邮箱

abc@your_company.com   def@your_company.com 替换成接收邮件的邮箱,采用以下格式来添加多个 abc;def;ghi;…;…

mail.your_company.com替换成SVN更新提醒邮箱的SMTP发件服务器地址

smtp-port 25 中的25更换成SMTP发件服务器的端口

svn_log@your_company.com 更换成你设置的SVN更新提醒邮箱

yourmail_passwd 更换成你的邮箱密码

如果你的邮箱需要启用ssl,请在密码那行下面加上

–smtp-ssl ^

表示启用SSL验证。

然后保存即可。

不过抽空我还是打算按照之前最初的思路和linux下的Post-commit hook方法写两个脚本出来。。。

 

zabbix-server 没有跑起来的问题

装好后发现网页端提示我zabbix没有正常跑起来。。。

先看一下log

cat /var/log/zabbix/zabbix_server.log

看到这个,突然想起来,用了那么多localhost,selinux肯定会阻止了。

参考这篇文章:https://blog.csdn.net/hanzheng260561728/article/details/51514398

我比较懒,没有用他的方法2,毕竟搞不好以后服务器要改IP,直接用了方法1。

先永久关闭selinux

vi /etc/selinux/config

#SELINUX=disabled

#SELINUXTYPE=targeted

然后再干脆禁用掉防火墙,因为我这边不会挂到外网,即便要挂也只映射80端口出去,其他端口外部无法访问,所以安心的禁用掉了防火墙。

systemctl disable firewalld

本来想重启服务的,结果发现zabbix-server服务卡死了,没法重启,反正都添加了开机自启,直接强制关机重启了,然后后面就全部正常了。

接下来按照该页进行配置即可:

https://www.zabbix.com/documentation/3.4/zh/manual/quickstart

一步步搭建zabbix监控平台

打算折腾个Zabbix,用于监控公司的服务器设备与网络服务,并在服务中断的时候及时报警通知。

计划是:先遵循官网的快速部署向导,部署一下zabbix基础版本,再进行配置,看是否能满足需求,不能满足的部分再进行二次定制开发。

本篇主要讲述快速部署方面的内容。

https://www.zabbix.com/download

按照网页的指引,选择自己想要安装的zabbix版本+系统OS版本+数据库版本

这次采用zabbix 3.4+Centos 7 + Mysql的部署方案(准确来说,我用的好像是mariaDB)

准确来说,这个系统是要LAMP环境(Linux + Apache+mysql(MariaDB)+PHP,不过后面zabbix的源里,有设置apache和php的依赖性安装,所以不需要手动提前安装,只要手动提前部署mysql(MariaDB)即可。

先安装部署mysql(MariaDB)

yum -y install mariadb* #加个*通配符,表示mariadb全部组件

安装完后,把mysql的服务给开起来,并设置为开机自启动

systemctl start mariadb #启动mariadb

systemctl enable mariadb #添加mariadb到开机自启动顺序里

好了,然后赶紧登陆上去MariaDB试试,顺带改个密码:

mysql -u root

用root用户登录到localhost的mysql(MariaDB),执行以下sql指令并退出

SET PASSWORD FOR ‘root’@’localhost’ = PASSWORD(‘Your_password’);

请将上面的Your_password改成你要设的密码!提示成功后退出

exit

接下来来安装zabbix的3.4版本+mysql数据库支持的源

rpm -i https://repo.zabbix.com/zabbix/3.4/rhel/7/x86_64/zabbix-release-3.4-2.el7.noarch.rpm

以上地址可能会有变化,请参考官网给出的地址!

源添加成功后,使用yum工具来安装zabbix的相关组件

yum install zabbix-server-mysql zabbix-web-mysql zabbix-agent -y

接下来来建立个初始化数据库

mysql -uroot -p

然后输入你的密码:

Your_password

严重警告:真的拿Your_password来当密码是个很不负责任的行为!请更改,不知道怎么做的话,可以采用Zabbix@公司英文名@日期的方式。

创建一下zabbix数据库:

create database zabbix character set utf8 collate utf8_bin;

然后把这个数据库授权给新建的zabbix账号

grant all privileges on zabbix.* to zabbix@localhost identified by ‘password‘;

请把password更换为zabbix用户的数据库密码!请不要不负责任的直接使用password当密码!要出事的!

然后退出数据库命令行模式

quit;

然后导入Zabbix模板和初始数据

zcat /usr/share/doc/zabbix-server-mysql*/create.sql.gz | mysql -uzabbix -p zabbix

这个-p参数后的是数据库名,请不要把这个-p zabbix错误的替换成-p password,照抄即可。

完事后,该编辑下Zabbix里面的数据库密码设置了。

文件路径:/etc/zabbix/zabbix_server.conf

修改内容为:

DBPassword=password

然后保存,再去修改php设置里面的时区地点参数。

文件路径:/etc/httpd/conf.d/zabbix.conf

内容:

php_value date.timezone Asia/Shanghai

然后启动zabbix相关服务,并把他们添加到linux开机自启动里面。

systemctl restart zabbix-server zabbix-agent httpd

systemctl enable zabbix-server zabbix-agent httpd

然后开放一下防火墙的80端口

firewall-cmd –zone=public –add-port=80/tcp –permanent

然后为了让规则生效,重启下防火墙

systemctl restart firewalld

接下来进行网页前端化安装

 

打开网页 服务器ip/zabbix  即可看到上面这个东西。点下一步安装

这些是安装前环境检查,确保你的生产环境符合安装要求。一步步按着来的话,这里应该是稳稳的全绿。继续下一步。

不稳的话请参照下面这个表进行排查,该表抄自官网。

Pre-requisite Minimum value Description
PHP version 5.4.0
PHP memory_limit option 128MB In php.ini:
memory_limit = 128M
PHP post_max_size option 16MB In php.ini:
post_max_size = 16M
PHP upload_max_filesize option 2MB In php.ini:
upload_max_filesize = 2M
PHP max_execution_time option 300 seconds (values 0 and -1 are allowed) In php.ini:
max_execution_time = 300
PHP max_input_time option 300 seconds (values 0 and -1 are allowed) In php.ini:
max_input_time = 300
PHP session.auto_start option must be disabled In php.ini:
session.auto_start = 0
Database support One of: MySQL, Oracle, PostgreSQL, IBM DB2 One of the following modules must be installed:
mysql, oci8, pgsql, ibm_db2
bcmath php-bcmath
mbstring php-mbstring
PHP mbstring.func_overload option must be disabled In php.ini:
mbstring.func_overload = 0
PHP always_populate_raw_post_data option must be disabled Required only for PHP versions 5.6.0 or newer.
In php.ini:
always_populate_raw_post_data = -1
sockets php-net-socket. Required for user script support.
gd 2.0 or higher php-gd. PHP GD extension must support PNG images (–with-png-dir), JPEG (–with-jpeg-dir) images and FreeType 2 (–with-freetype-dir).
libxml 2.6.15 php-xml or php5-dom
xmlwriter php-xmlwriter
xmlreader php-xmlreader
ctype php-ctype
session php-session
gettext php-gettext
Since Zabbix 2.2.1, the PHP gettext extension is not a mandatory requirement for installing Zabbix. If gettext is not installed, the frontend will work as usual, however, the translations will not be available.

接下来,设置下mysql(MariaDB)的信息,基本上改下密码就行,毕竟其他的我们都没改过。

这个是自定义Zabbix服务器相关信息的,这些信息修改为可选项,如果端口没冲突,你也没有必要非得去改它名字的话,那就懒得动了。

这个页面是设置信息回顾的(Review),如果没问题就直接下一步,有问题就回过去重新弄。

安装完毕,开始爽吧~

 

当然,也还有比较悲催没弄好用户权限的同学,导致这个配置页面没法正常被创建,就会看到下面这个画面。

那么,就按照这个来,点击蓝色字体下载那个配置用的文件,然后把它放到php文件夹下你放zabbix的位置。这个位置问你自己,因为权限报错说明文件夹是你自己建的,而不是zabbix生成。当然,你也可以把那个目录给chmod -R 777一下,不过把文件夹变成公共厕所的风险务必要自行承担!

接下来就是登陆了,默认用户Admin,默认密码zabbix。

Enjoy !

其他问题联系qq:1637999484 ,解答一些小问题。不过我自己也比较忙,不保证一定能给你解决问题。

重启后docker没法进行操作, 报 Cannot connect to the Docker daemon. Is the docker daemon running on this host?

因为Docker 运行的gitlab 把内存用光了,重新启动了下机器,然后多分了点内存给这台虚拟机,然后准备 docker start gitlab,结果报错

Cannot connect to the Docker daemon. Is the docker daemon running on this host?

然后才想起来,我擦。。。docker服务没有开机自启动,于是开一下docker的service

service docker start

或者

systemctl start docker

以上为centos/red hat 系列服务器指令。Ubuntu自查。

要是避免下次出这个问题,则需要添加到开机启动里。

systemctl enable docker

浅谈常用的几个raid,并着重讲讲raid 01和raid 10的区别

常用的几个raid 介绍

一、常用的初始raid等级

    (1) raid 0

raid 0 ,是一种简单、无数据效验的条带化技术。严格来说并不能算是真正raid,因为它没有提供数据的“冗余保护”。万一硬盘坏了,就全完了。

简单来说,就是把你的数据分散到两个(也可以是多个,也是按照一样的数据的分布模型)硬盘上,再并行化读取写入,从而提高IO性能,即1+1=2。(持续IO理论上是这样,小文件IO并不会有什么增长,也遇到过负增长的情况)

例如:原始数据是 A1、A2、A3、A4、A5、A6、A7、A8,在raid 0的情况下,就会分散到两个盘里,disk 0 存 A1、A3、A5、A7 ,disk 1存A2 、A4、A6、A8。普通的单盘,读取/写入这A1~A8的数据时,会需要8个读写周期。而raid 0情况下,因为两个盘会同步读取,即disk 0读A1时,disk1会同步读同样位置的A2,所以只要4个读写周期,就能完成A1~A8的数据操作,实现读写翻倍。

这个模式也可以应用于多盘硬盘RAID 0,比如你用8个盘做raid 0,每个盘分别存了A1~A8一节数据,那么只要一个读写周期就能读写完毕。raid 0的IO性能理论上是按照盘数叠加的(如果你的盘里没有特别慢拖后腿的盘),8盘raid+现在单碟1T盘普遍能达到持续IO 100M/S,则这组raid 0可以达到800M/S的持续IO。

然而理想很美好,现实很骨感。

首先是小文件的问题,raid 0 小文件基本基本不起作用。小文件和4K性能,基本上是机械硬盘的“硬伤”,因为限制住硬盘小文件IO和4K IO发挥的,主要是“寻道时间”。小文件放在不同磁道上,要来回切换磁道,浪费大量的时间,这个也同样在raid0上出现,没法解决,导致4K和小文件IO性能基本增长为0。

然后就是数据安全性的问题。如开头说的,它没有“冗余数据保护”。

即数据坏了就是坏了,只能视图找高价的专业数据恢复公司。有些人想着,坏了就是坏了,没关系,就像普通硬盘一样,拿着其他的好硬盘继续用? NO,回到当初的数据模型。。。原始数据是A1~A8,假设我们用了8盘raid 0,然后其中的第三块盘挂掉了,那么这段A1~A8的数据中,A3就永远缺失了,于是整段A1~A8数据彻底报废。。。raid 0 只要一块盘挂了,哪怕是意外掉线,都有可能搞得整个硬盘阵列组彻底挂掉。所以raid 0往往是一些硬件玩家用在个人PC上的方案,一般没什么人敢拿自己公司的生产数据去冒这个险。

(2) raid 1

raid 1跟raid 0很像,不过是另外一个极端。raid 0是只要速度,不要数据保护,没有冗余只有加速。而raid 1是不要速度,只要数据保护,只有冗余没有加速。

raid 1其实就是个“镜像”技术,比如本来写在单盘上的A1、A2、A3、A4,我同时在两个盘上都给写上去。这样,两块盘中,当有一块盘挂掉的时候,另一块盘可以立马接替工作(因为有100%完整一致的数据)。然后这个时候,你就能把原来的坏盘拔下来,再插一张新盘上去。如果是硬件raid 卡,则会自动rebuild,然后把数据热备到新盘上。过了一会,则新盘跟原来的老盘一样,有完整的全部数据了。整个过程中,硬盘阵列是一直在线的,不会影响正在跑的业务。但是rebuild热备到新硬盘的过程中,会对阵列性能有一定的影响。

如果是软 raid,则可能需要手动设置下,才能正常rebuild。还有,如果是关机了,再对硬盘进行替换,即便有硬件阵列卡,也不会进行自动rebuild,需要进一下raid卡管理界面配置后才能进行rebuild。所以最好还是开机运行中更换,不然业务中断也会造成不好影响。

这个比较适合做网站和小型数据库、小型应用之类的。毕竟raid 1上限就是2块盘,多盘意义不大(你给一块盘做多个备份意义不大,一个备份就够了,raid 1往往都能用到换机时还没坏)。所以适合不需要太大磁盘空间,但是对数据安全性比较敏感的商用环境。

(3) raid 5

无论是raid 0 也好,raid 1也好,这两个主流技术都偏向了极端,要么是要速度,没备份,要么有备份,没速度,有没有折中点,能提供加速,也能提供备份,同时不像raid 1一样浪费大把的磁盘空间?有! raid 5。

不过相对于raid 1而言,他并没有专门的硬盘来储存备份数据,而是分散式效验存储。如图,原有的数据是:A1、A2、A3、B1、B2、B3、C1、C2、C3、D1、D2、D3,而A1~A3的效验值为Ap,B1~B3的效验值为Bp,C1~C3的效验值为Cp,D1~D3的效验值为Dp。

然后把数据块和他们对应的效验块分散到不同的硬盘上,这样来规避安全风险。

比如Disk 2坏了,你插了新硬盘后,A3 将通过A1+A2数据块综合他们的条带效验值Ap来反算出来,然后重新存储进新的Disk 2, Bp是B1~B3的校验和,直接重新拿B1~B3算一次就好,C2也能通过C1+C3综合校验和Cp反酸,同理,D2也是一样能通过分散在其他盘的数据块+数据块的效验和反算。

简单来说,就是RAID 5损失了一块硬盘后。这块盘上储存的数据,因为分散存储了数据和校验和的原因,可以通过其他盘上分散存储的数据和校验和来彻底恢复损失盘上的数据。

这个方案看起来很不错,因为他的备份损失是N-1。即你用N块硬盘来加入raid 5的组合,会因为需要一块盘来存综合校验和(架设你把上面的Ap、Bp、Cp、Dp刚好全部挪到一个盘上,会发现刚好浪费一个盘的空间,不过肯定不能放到同一个盘上,这样刚好损失全部校验和或者全部数据的时候就GG了),所以会损失掉一个盘的空间,同时因为要产生存储IO无用、仅在效验的时候有用的校验和,在IO周期内,也会损失掉一个盘的IO性能,但是,剩下的空间和IO性能,却能在理论上都利用起来。

比如上图的4盘方案,可以利用3盘的空间,持续IO性能也理论上相当于3盘叠加,利用率很高。而使用4盘以上的时候,因为这个方案始终牺牲后的性能和存储容量为N-1,那么利用率肯定会越来越高。(利用率= N-1/N,肯定N越大越好,能无限接近于1)

但还是理想很美好,现实很残酷,这也是为什么RAID5往往还仅出现在硬件玩家的PC上和运维菜鸟的运维的服务器上。。。

https://www.cnblogs.com/wycc/p/6477351.html?utm_source=itdadao&utm_medium=referral

具体详情请参考上面那篇技术大牛的文章,我这里只把他的结论简单汇总下。

 

 

(施工中,未完待续,催更加Q 1637999484)