<?xml version="1.0" encoding="UTF-8" standalone="no"?><rss xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" version="2.0">

<channel>
	<title>Linux</title>
	<atom:link href="https://www.novid.ir/feed/" rel="self" type="application/rss+xml"/>
	<link>https://www.novid.ir</link>
	<description>linux &amp; IT ?</description>
	<lastBuildDate>Tue, 20 Nov 2018 15:09:49 +0000</lastBuildDate>
	<language>fa-IR</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.7.1</generator>
	<item>
		<title>swaks، چاقوی ارتش سوئیس برای تست smtp سرور</title>
		<link>https://www.novid.ir/2715/</link>
					<comments>https://www.novid.ir/2715/#respond</comments>
		
		<dc:creator><![CDATA[novid]]></dc:creator>
		<pubDate>Mon, 19 Nov 2018 17:59:55 +0000</pubDate>
				<category><![CDATA[linux]]></category>
		<category><![CDATA[امنیت]]></category>
		<category><![CDATA[ایمیل]]></category>
		<category><![CDATA[لینوکس]]></category>
		<guid isPermaLink="false">http://www.novid.ir/?p=2715</guid>

					<description><![CDATA[برای ارسال ایمیل به افراد دیگر، بایستی یک SMTP سرور راه‌اندازی کرد. بعد باید مطمئن شد امکان ارسال ایمیل از طریق سرور، جز با یوزر و پسورد تعریف شده وجود ندارد و بعد از احراز هویت نیز فقط با نام کاربری خود، قادر به ارسال ایمیل است و نباید با ایمیل دیگر افراد عضو در [&#8230;]]]></description>
										<content:encoded><![CDATA[<p style="text-align: right;">برای ارسال ایمیل به افراد دیگر، بایستی یک SMTP سرور راه‌اندازی کرد. بعد باید مطمئن شد امکان ارسال ایمیل از طریق سرور، جز با یوزر و پسورد تعریف شده وجود ندارد و بعد از احراز هویت نیز فقط با نام کاربری خود، قادر به ارسال ایمیل است و نباید با ایمیل دیگر افراد عضو در سیستم بتواند اقدام به ارسال ایمیل کند.<br />
همینطور باید مطمئن بود که ایمیل‌های ارسالی از سروری غیر از آنها که در لیست سفید مشخص شده‌اند به دست کاربر نهایی نرسد.</p>
<p style="text-align: right;">در حالت عادی می‌توان هر ایمیلی را با هر فرستنده‌ای که دوست داشته باشید<br />
به هر فردی ارسال کنید. اما mail server که درست تنظیم شده باشد همچون gmail و یاهو ip ایمیل دریافتی را با رکورد spf که صاحب دامین آن را تعریف کرده، تطبیق می‌دهند و در صورت ناهمخوانی ایمیل مستقیم به بخش اسپم می‌رود و غیر از آن یک نوشته را به کاربر نمایش می‌دهند که احتمال فیشینگ ایمیل وجود دارد.</p>
<p>&nbsp;</p>
<p style="text-align: right;">برای تست همه این موارد نیاز به یک SMTP سرور (برای مثال smtp.novid.ir:587) و تعریف چند کاربر (admin@novid.ir و info@novid.ir) و همینطور ایجاد پسورد برای آنها داریم. ایمیل‌های تست به آدرس novid@protonmail.com  ارسال می‌شود. برای تست حالت‌های مختلف از ابزار قدرتمند <a href="http://www.jetmore.org/john/code/swaks/">SWAKS</a> استفاده خواهیم کرد.</p>
<p>&nbsp;</p>
<h2>ارسال ایمیل بدون احراز هویت</h2>
<p>اگر SMTP سرور به درستی کانفیگ نشود، هر فردی بدون احراز هویت قادر به ارسال ایمیل از طریق آن خواهد بود. به اینگونه سرورها در اصطلاح <a href="https://en.wikipedia.org/wiki/Open_mail_relay">open mail relay</a> گفته می‌شود.</p>
<p>با استفاده از ابزار SWAKS و بدون وارد کردن یوزر و پسورد سعی در اسال ایمیل می‌کنیم.<br />
در صورت موفقیت در ارسال ایمیل، انتظار این رو داشته باشید که سرور به زودی در لیست سیاه قرار خواهد گرفت و تا مدت‌ها دیگر نخواهید توانست میل بفرستید.</p><pre class="urvanov-syntax-highlighter-plain-tag">novid@novid-salavan ~ $ swaks -t novid@protonmail.com -s smtp.novid.ir:587 -tls --from admin@novid.ir
=== Trying smtp.novid.ir:587...
=== Connected to smtp.novid.ir.
&lt;- 250 STARTTLS
-&gt; STARTTLS
&lt;- 220 2.0.0 Start TLS
=== TLS started with cipher TLSv1.2:ECDHE-RSA-AES256-GCM-SHA384:256
=== TLS no local certificate set
=== TLS peer DN="/CN=smtp.novid.ir"
~&gt; EHLO novid-salavan
&lt;~ 250 AUTH PLAIN
~&gt; MAIL FROM:&lt;admin@novid.ir&gt;
&lt;~* 530 5.7.1 Authentication required
~&gt; QUIT
&lt;~ 221 2.0.0 Bye
=== Connection closed with remote host.</pre><p>&nbsp;</p>
<ul>
<li style="text-align: right;">آپشن t یا همان to ایمیل فرد دریافت کننده است.</li>
<li style="text-align: right;">s یا همان server، آی‌پی یا آدرس smtp سرور مد نظر است که در اینجا از طریق پورت <a href="https://www.mailgun.com/blog/which-smtp-port-understanding-ports-25-465-587">587</a> قصد وصل شدن به آن را داریم.<br />
پورت ۲۵ رو بسیاری از دیتاسنترها بسته‌اند و به دلیل امن نبودن، استفاده از آن توصیه نمی‌شود.</li>
<li style="text-align: right;">با استفاده از آپشن tls، کانکشن به smtp سرور به شکل <a href="https://www.fastmail.com/help/technical/ssltlsstarttls.html">STARTTLS</a> برقرار می‌شود.</li>
<li style="text-align: right;">با آپشن from ایمیل فرستنده را مشخص می‌کنیم.</li>
</ul>
<p><strong>معمولا خط بالای QUIT مشکل اصلی در عدم ارسال ایمیل را می‌گوید.</strong></p>
<p>&lt;~* 530 5.7.1 Authentication required</p>
<h2>تست باز یا بسته بودن پورت ۲۵ SMTP سرور</h2>
<p>برای تست پورت ۲۵، کامند زیر را اجرا می‌کنیم.<br />
به شکل پیشفرض swaks از پروتکل امن esmtp جهت اتصال به سرور استفاده می‌کند.</p><pre class="urvanov-syntax-highlighter-plain-tag">novid@novid-salavan ~ $ swaks -t novid@protonmail.com -s smtp.novid.ir:25 --protocol smtp --from admin@novid.ir
=== Trying smtp.novid.ir:25...
*** Error connecting to smtp.novid.ir:25:
*** IO::Socket::INET6: connect: No route to host</pre><p>که نشان می‌دهد دسترسی به پورت ۲۵ عملا امکانپذیر نیست.</p>
<h2>ارسال ایمیل با احراز هویت</h2>
<p>برای ارسال ایمیل با یوزر و پسورد کافیست که <strong>آپشن a یا همون auth</strong> رو به کامند اضافه کنیم.<br />
بعد از زدن اینتر،  یوزر و پسورد به شکل جداگانه پرسیده می‌شود.</p><pre class="urvanov-syntax-highlighter-plain-tag">novid@novid-salavan ~ $ swaks -t novid@protonmail.com -s smtp.novid.ir:587 --tls -a --from admin@novid.ir
Username: admin@novid.ir
Password: 123456
&lt;- 250 STARTTLS
-&gt; STARTTLS
&lt;- 220 2.0.0 Start TLS
=== TLS started with cipher TLSv1.2:ECDHE-RSA-AES256-GCM-SHA384:256
=== TLS no local certificate set
=== TLS peer DN="/CN=smtp.novid.ir"
~&gt; EHLO novid-salavan
&lt;~ 250-smtp.novid.ir
&lt;~ 250 AUTH PLAIN
~&gt; AUTH PLAIN AGFkbWluQG5vdmlkLmlyAHJzMm5rZ3NzNQ==
&lt;~ 235 2.0.0 OK
~&gt; MAIL FROM:&lt;admin@novid.ir&gt;
&lt;~ 250 2.1.0 Ok
~&gt; RCPT TO:&lt;novid@protonmail.com&gt;
&lt;~ 250 2.1.5 Ok
~&gt; DATA
&lt;~ 354 End data with &lt;CR&gt;&lt;LF&gt;.&lt;CR&gt;&lt;LF&gt;
~&gt; Date: Mon, 19 Nov 2018 16:19:41 +0300
~&gt; To: novid@protonmail.com
~&gt; From: admin@novid.ir
~&gt; Subject: test Mon, 19 Nov 2018 16:19:41 +0300
~&gt; Message-Id: &lt;20181119161941.016258@novid-salavan&gt;
~&gt; X-Mailer: swaks v20170101.0 jetmore.org/john/code/swaks/
~&gt; 
~&gt; This is a test mailing
~&gt; 
~&gt; .
&lt;~ 250 2.0.0 Ok: queued as 5203E17BEA6
~&gt; QUIT
&lt;~ 221 2.0.0 Bye
=== Connection closed with remote host.</pre><p>&nbsp;</p>
<h2>ارسال ایمیل بدون فعال‌سازی tls</h2>
<p>تست رو مجدد بدون tls انجام می‌دیم تا مطمئن شویم تنها راه اتصال به سرور از طریق امن امکان پذیر است.</p><pre class="urvanov-syntax-highlighter-plain-tag">novid@novid-salavan ~ $ swaks -t novid@protonmail.com -s smtp.novid.ir:587 -a --from admin@novid.ir
Username: admin@novid.ir 
Password: 123456
=== Trying smtp.novid.ir:587...
=== Connected to smtp.novid.ir.
&lt;- 250 STARTTLS
*** Host did not advertise authentication
-&gt; QUIT
&lt;- 221 2.0.0 Bye
=== Connection closed with remote host.</pre><p>&nbsp;</p>
<h2>ارسال ایمیل با پسورد اشتباه</h2>
<p>کامند را با پسورد اشتباه اجرا و انتظار داریم که ایمیل ارسال نشود.</p><pre class="urvanov-syntax-highlighter-plain-tag">novid@novid-salavan ~ $ swaks -t novid@protonmail.com -s smtp.novid.ir:587 --tls -a --from admin@novid.ir
Username: admin@novid.ir
Password: 123 
=== Trying smtp.novid.ir:587...
=== Connected to smtp.novid.ir.
&lt;- 250 STARTTLS
-&gt; STARTTLS
&lt;- 220 2.0.0 Start TLS
=== TLS started with cipher TLSv1.2:ECDHE-RSA-AES256-GCM-SHA384:256
=== TLS no local certificate set
&lt;~ 250 AUTH PLAIN
~&gt; AUTH PLAIN AGFkbWluQG5vdmlkLmlyADEyMw==
&lt;~* 535 5.7.8 Authentication credentials invalid
*** No authentication type succeeded
~&gt; QUIT
*** Remote host closed connection unexpectedly.</pre><p></p>
<h2>ارسال ایمیل با هویت یک فرد دیگر عضو سیستم</h2>
<p>تست رو تغییر داده با یوزر و پسورد صحیح کاربر admin ایمیلی از طرف  info بفرستیم.<br />
کافیست که from رو به info تغییر داده و یوزر و پسورد admin رو وارد به ترتیب صحبح وارد نماییم.</p><pre class="urvanov-syntax-highlighter-plain-tag">novid@novid-salavan ~ $ swaks -t novid@protonmail.com -s smtp.novid.ir:587 --tls -a --from info@novid.ir
Username: admin@novid.ir
Password: 123456
&lt;~ 235 2.0.0 OK
~&gt; MAIL FROM:&lt;info@novid.ir&gt;
&lt;~ 250 2.1.0 Ok
~&gt; RCPT TO:&lt;novid@protonmail.com&gt;
&lt;~* 553 5.7.1 &lt;info@novid.ir&gt;: Sender address rejected: not owned by user admin@novid.ir
~&gt; QUIT
&lt;~ 221 2.0.0 Bye
=== Connection closed with remote host.</pre><p>&nbsp;</p>
<h2>ارسال ایمیل با هویت فردی که عضو سیستم نیست</h2>
<p>در آخر از طرف فردی که در سیستم وجود ندارد سعی در ارسال ایمیل می‌نماییم.</p><pre class="urvanov-syntax-highlighter-plain-tag">novid@novid-salavan ~ $ swaks -t novid@protonmail.com -s smtp.novid.ir:587 --tls -a --from null@novid.ir
Username: admin@novid.ir
Password: 123456
&lt;~ 250 2.1.0 Ok
~&gt; RCPT TO:&lt;novid@protonmail.com&gt;
&lt;~* 550 5.1.0 &lt;null@novid.ir&gt;: Sender address rejected: User unknown in virtual mailbox table
~&gt; QUIT
&lt;~ 221 2.0.0 Bye
=== Connection closed with remote host.</pre><p>&nbsp;</p>
<p><strong>پی‌نوشت</strong>: خروجی swaks در این مثال‌ها بخاطر حفظ IP اصلی سرور دستکاری شده است.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.novid.ir/2715/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>استفاده از DNS بر بستر TLS با pfSense</title>
		<link>https://www.novid.ir/2702/</link>
					<comments>https://www.novid.ir/2702/#comments</comments>
		
		<dc:creator><![CDATA[novid]]></dc:creator>
		<pubDate>Sat, 07 Apr 2018 15:26:40 +0000</pubDate>
				<category><![CDATA[linux]]></category>
		<category><![CDATA[cloudflare]]></category>
		<category><![CDATA[dns]]></category>
		<category><![CDATA[tls]]></category>
		<category><![CDATA[لینوکس]]></category>
		<category><![CDATA[کلودفلیر]]></category>
		<guid isPermaLink="false">http://www.novid.ir/?p=2702</guid>

					<description><![CDATA[دی‌ان‌اس‌های جدید کلودفلیر به مشخصات 1.1.1.1 و 1.0.0.1 به تازگی معرفی شدند. ویژگی خوب کلودفلیر غیر از سرعت بالای اون قابلیت پشتیبانی از TLS هست و به همین دلیل درخواست کلاینت به سرور رمزنگاری شده و دیگر امکان تغییر پاسخ در بین راه وجود نخواهد داشت. از اونطرف در صورت استفاده از روتر pfSense این [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>دی‌ان‌اس‌های جدید کلودفلیر به مشخصات <a href="https://1.1.1.1/">1.1.1.1</a> و 1.0.0.1 به تازگی معرفی شدند. ویژگی خوب کلودفلیر غیر از سرعت بالای اون قابلیت پشتیبانی از TLS هست و به همین دلیل درخواست کلاینت به سرور رمزنگاری شده و دیگر امکان تغییر پاسخ در بین راه وجود نخواهد داشت.</p>
<p>از اونطرف در صورت استفاده از روتر pfSense این قابلیت خوب رو خواهید داشت که بدون نصب هیچ کلاینت و برنامه‌ی جانبی از این موهبت برخوردار شوید. برای اینکار باید مراحل زیر را در pfSense دنبال نمایید.</p>
<p>ابتدا مطمئن شوید که به شکل عادی pfSense از دی‌ان‌اس‌های کلودفلیر استفاده می‌کند.</p>
<p>برای اینکار در بخش System &gt; General Settings و در بخش DNS Servers آدرس‌های کلودفلیر را وارد می‌کنیم.</p>
<p>&nbsp;</p>
<p><img fetchpriority="high" decoding="async" class="aligncenter size-full wp-image-2705" src="http://www.novid.ir/wp-content/uploads/2018/04/Screenshot-from-2018-04-07-19-31-51.png" alt="" width="947" height="250" /></p>
<p>برای اینکه به pfSense بگیم که از قابلیت TLS استفاده کند به بخش  Services &gt; DNS Resolver رفته در بخش Display Custom Options متن زیر رو بگذارید.</p><pre class="urvanov-syntax-highlighter-plain-tag">server:
forward-zone:
name: "."
forward-ssl-upstream: yes
forward-addr: 1.1.1.1@853
forward-addr: 1.0.0.1@853</pre><p><img decoding="async" class="aligncenter size-full wp-image-2706" src="https://www.novid.ir/wp-content/uploads/2018/04/Screenshot-from-2018-04-07-19-40-46.png" alt="" width="934" height="261" /></p>
<p>&nbsp;</p>
<p>در صورتیکه بخواهید از Quad9 DNS servers که متعلق به IBM استفاده نمایید یا اونها رو در کنار کلودفلیر داشته باشید کافیه این دو خط رو جایگزین خطوط بالا کنید یا زیر اون اضافه نمایید.</p><pre class="urvanov-syntax-highlighter-plain-tag">forward-addr: 9.9.9.9@853
forward-addr: 149.112.112.112@853</pre><p><a href="https://www.netgate.com/blog/dns-over-tls-with-pfsense.html">منبع</a></p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.novid.ir/2702/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
			</item>
		<item>
		<title>تغییر محتوای یک سایت از طریق nginx</title>
		<link>https://www.novid.ir/2699/</link>
					<comments>https://www.novid.ir/2699/#respond</comments>
		
		<dc:creator><![CDATA[novid]]></dc:creator>
		<pubDate>Mon, 02 Apr 2018 19:52:29 +0000</pubDate>
				<category><![CDATA[لینوکس]]></category>
		<category><![CDATA[nginx]]></category>
		<category><![CDATA[ماجول]]></category>
		<guid isPermaLink="false">http://www.novid.ir/?p=2699</guid>

					<description><![CDATA[تصور کنید یک وب‌سایت دارید که با php کار می‌کند و با استفاده از nginx سرو می‌شود. برای وب‌سایت سرتیفیکیت تهیه کردید اما لینک تصاویر و فایل‌های داخل سایت با پروتکل http جای https شروع میشود و در نتیجه هنگام لود سایت، مرورگرهای جدید محتوایی که با http شروع شوند را بلاک می‌کنند. راه اول [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>تصور کنید یک وب‌سایت دارید که با php کار می‌کند و با استفاده از nginx سرو می‌شود. برای وب‌سایت سرتیفیکیت تهیه کردید اما لینک تصاویر و فایل‌های داخل سایت با پروتکل http جای https شروع میشود و در نتیجه هنگام لود سایت، مرورگرهای جدید محتوایی که با http شروع شوند را <a href="https://developer.mozilla.org/en-US/docs/Web/Security/Mixed_content/How_to_fix_website_with_mixed_content">بلاک</a> می‌کنند.</p>
<p>راه اول تغییر برنامه‌ست و اینکه کاری کنیم که همه‌ی لینک‌ها با https شروع بشود. اما این روش همیشه مقدور نیست و خیلی وقت‌ها تغییر کد مقدور نیست. اینجاست که nginx و ماژول زیبای <a href="https://nginx.org/en/docs/http/ngx_http_sub_module.html">nginx_substitutions_filter</a> به کار آدم میاد. با استفاده از این ماجول می‌توانیم هر نوشته‌ای رو قبل از نمایش برای کلاینت تغییر بدهیم.</p>
<p>برای اینکار کافیست در بخش server دو خط زیر رو وارد کنیم. در صورت حذف خط دوم،‌ فقط اولین http  به https تبدیل می‌شود.</p><pre class="urvanov-syntax-highlighter-plain-tag">sub_filter 'http://' 'https://';

sub_filter_once off;</pre><p>&nbsp;</p>
<p>اما همین دو خط زمانیکه nginx پشت یک لودبالانس مانند haproxy باشد کار <a href="https://stackoverflow.com/questions/31893211/http-sub-module-sub-filter-of-nginx-and-reverse-proxy-not-working">نخواهد کرد</a>. برای حل این مشکل کافیست خط زیر رو به کانفیگ nginx در بخش location اضافه نمایید.</p><pre class="urvanov-syntax-highlighter-plain-tag">proxy_set_header Accept-Encoding "";</pre><p>&nbsp;</p>
<p>&nbsp;</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.novid.ir/2699/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>اضافه کردن یک نود جدید به glusterfs</title>
		<link>https://www.novid.ir/2698/</link>
					<comments>https://www.novid.ir/2698/#comments</comments>
		
		<dc:creator><![CDATA[novid]]></dc:creator>
		<pubDate>Mon, 12 Mar 2018 19:23:18 +0000</pubDate>
				<category><![CDATA[linux]]></category>
		<category><![CDATA[centos]]></category>
		<category><![CDATA[دانگرید]]></category>
		<category><![CDATA[لینوکس]]></category>
		<category><![CDATA[مخزن]]></category>
		<category><![CDATA[گلاستر]]></category>
		<guid isPermaLink="false">http://www.novid.ir/?p=2698</guid>

					<description><![CDATA[وقتی سه سرور داشته باشید که هر کدام از آنها برای مثال سه ترابایت فضای ذخیره داشته باشند و بخواید همه این فضاها رو یکی کنید و به یک استوریج نه ترابایتی برسید یکی از گزینه‌های خوب  گلاستراف‌اس است. در سنت‌اواس به راحتی میشه ورژن‌های مختلف این برنامه رو نصب کرد. حالا فرض رو بگذارید [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>وقتی سه سرور داشته باشید که هر کدام از آنها برای مثال سه ترابایت فضای ذخیره داشته باشند و بخواید همه این فضاها رو یکی کنید و به یک استوریج نه ترابایتی برسید یکی از گزینه‌های خوب  <a href="https://www.gluster.org/">گلاستراف‌اس</a> است. در سنت‌اواس به راحتی میشه ورژن‌های مختلف این برنامه رو نصب کرد. حالا فرض رو بگذارید که زمان گذشته و قصد کردیم سرور چهارم (s4) رو به کلاستر (s1,s2,s3) اضافه کنیم. برای اینکار باید در یکی از سرورهایی که از قبل عضو کلاستر بودند، کامند زیر رو اجرا کنید.</p><pre class="urvanov-syntax-highlighter-plain-tag">root@s2:~# gluster peer probe s4.storage</pre><p>اما اگر مثل من بدشانس باشید همین دستور خیلی ساده مشکل ساز میشه و عضو جدید به درستی کار نخواهد کرد.</p><pre class="urvanov-syntax-highlighter-plain-tag">gluster peer status

Hostname: s4.storage
Uuid: 7b4hf063-f234-4422-9ebc-53254bab90535
State: Peer Rejected (Disconnected)</pre><p>وقتی لاگ مربوط به گلاستر در سرور s4 رو ببینید همچین پیغامی خواهید دید.</p><pre class="urvanov-syntax-highlighter-plain-tag">0-glusterd: Unable to find peerinfo for host: s2.storage (24007)</pre><p>که با زبون سربسته داره میگه نود جدید که قصد اضافه کردن اون رو به کلاستر داشتیم نتونسته اطلاعات لازم رو از نود s2 بگیرد! نود s2 همون نودی بوده که از قبل عضو کلاستر بوده و از داخل اون قصد داشتیم نود جدید رو عضو کلاستر کنیم.</p>
<p>دلیل این اتفاق این بود  که همه نودهای کلاستر ورژن 3.12.5 بودند اما در زمانیکه قصد اضافه کردن عضو جدید به کلاستر رو داشتم، گلاستر centos به نسخه 3.12.6 آپگرید شده و دقیقا همین موضوع باعث مشکل میشه. برای اضافه کردن نود جدید به کلاستر باید دقت کنید که ورژن گلاستر سرور جدید و قدیم دقیقا یکی باشد.</p>
<p>پروسه‌ی دانگرید در centos برخلاف اوبونتو می‌تونه آدمیزاد رو زخم کنه و اساسا بخاطر همین موضوع شروع به نوشتن این راهنما کردم.</p>
<p>کاری که  برای حل این مشکل انجام دادم این بود که پکیج‌های rpm  گلاستر رو از مسیر یکی از نودهایی که عضو کلاستر بود (s2) رو به سرور جدید انتقال دادم.</p><pre class="urvanov-syntax-highlighter-plain-tag">cd /var/cache/yum/x86_64/7/centos-gluster312/packages

scp *3.12.5* storage@s4.storage:/home/storage/repo</pre><p>بعد در سرور جدید (s4) به شکل زیر یک مخزن لوکال ساختم.</p><pre class="urvanov-syntax-highlighter-plain-tag">yum install createrepo -y

createrepo /home/storage/repo/

chmod -R o-w+r /home/storage/repo/</pre><p>و بعد مخزن رو باید به سنت‌او‌اس به شکل زیر معرفی کنیم.</p><pre class="urvanov-syntax-highlighter-plain-tag">vi /etc/yum.repos.d/gluster3125.repo

[local]
name=gluster3512
baseurl=file:///home/storage/repo
enabled=1
gpgcheck=0</pre><p>قبل از نصب گلاستر ورژن قدیمی، بایستی اول اون رو از کلاستر حذف کنیم<br />
برای اینکار کافیه از یکی از سرورها که عضو کلاستر هستند (s2) کامند زیر رو بزنید.</p><pre class="urvanov-syntax-highlighter-plain-tag">root@s2:~# gluster peer detach s4.storage</pre><p>بعد در سرور s4 که قراره ورژن اون رو دانگرید کنیم بعد از استاپ سرویس گلاستر در مسیر زیر هر چی فایل هست رو پاک کنیم.</p><pre class="urvanov-syntax-highlighter-plain-tag">systemctl stop glusterd

cd /var/lib/glusterd

rm -rf ./*</pre><p>&nbsp;</p>
<p>گلاستر برای نصب نیاز به یک پکیج به اسم userspace-rcu داره که ورژن اون  باید 0.10 به بالا باشد. برای نصب این پکیج بهتره از همونی که داخل مخزن گلاستر 3.12.6 موجوده بهره ببریم.</p>
<p>وقتی که میخوایم پکیج های گلاستر 3.12.6 رو پاک کنیم یادمون نمیره که userspace-rcu رو نگه داریم وگرنه به مشکل خواهیم خورد.</p><pre class="urvanov-syntax-highlighter-plain-tag">[root@s4 ~]# yum list installed | grep gluster | grep -v userspace | cut -d ' ' -f 1 | xargs yum remove -y</pre><p>حالا نوبت به نصب دوباره گلاستر می‌رسد. چون یک مخزن اضافه کردیم که  پکیج‌های گلاستر 3.12.5 داخلش موجوده اینبار ورژن قدیمی نصب خواهد شد.</p><pre class="urvanov-syntax-highlighter-plain-tag">yum install glusterfs-server -y</pre><p>و دوباره نود رو به کلاستر جوین میکنیم.</p><pre class="urvanov-syntax-highlighter-plain-tag">gluster peer probe s4.storage</pre><p>و در آخر مطمئن میشیم که همه چیز خوب پیش رفته باشد.</p><pre class="urvanov-syntax-highlighter-plain-tag">gluster peer status

State: Peer in Cluster (Connected)</pre><p>&nbsp;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.novid.ir/2698/feed/</wfw:commentRss>
			<slash:comments>3</slash:comments>
		
		
			</item>
		<item>
		<title>فیلم سون seven</title>
		<link>https://www.novid.ir/2692/</link>
					<comments>https://www.novid.ir/2692/#respond</comments>
		
		<dc:creator><![CDATA[novid]]></dc:creator>
		<pubDate>Sun, 29 Oct 2017 22:28:53 +0000</pubDate>
				<category><![CDATA[سینما]]></category>
		<category><![CDATA[سون]]></category>
		<category><![CDATA[فیلم]]></category>
		<category><![CDATA[هفت]]></category>
		<category><![CDATA[گناه]]></category>
		<guid isPermaLink="false">http://www.novid.ir/?p=2692</guid>

					<description><![CDATA[سلام خیلی یکهوویی تصمیم گرفتم فیلم‌های خوبی رو که اکثرا در سینما پردیس قلهک باهاشون آشنا شدم و می‌شم و با اونها خیلی حال کردم رو با شما نیز به اشتراک بگذارم. نکته مهم اینه که اینها صرفا  نظر شخصی و منتقد فیلم نیستم و اصولا هم تخصصی در این زمینه ندارم :))‌ صرفا یک [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>سلام</p>
<p>خیلی یکهوویی تصمیم گرفتم فیلم‌های خوبی رو که اکثرا در سینما پردیس قلهک باهاشون آشنا شدم و می‌شم و با اونها خیلی حال کردم رو با شما نیز به اشتراک بگذارم. نکته مهم اینه که اینها صرفا  نظر شخصی و منتقد فیلم نیستم و اصولا هم تخصصی در این زمینه ندارم :))‌ صرفا یک پیشنهاد برای اینکه شما هم اون رو ببینید، شاید مثل من از دیدنش لذت بردید.</p>
<p>برای شروع  هفت که ترجمه seven بهتون پیشنهاد میکنم حتما ببینید. این فیلم در لیستی هزارتایی قرار میگیره و اینطوری که میشه هزاربار این فیلم رو دید و هزاربار ناراحت شد و خسته هم نشد.</p>
<p>این فیلم در سال ۱۹۹۵ به کارگردانی دیوید فینچر با بازی بردپیت و مورگان فریمن ساخته شده.  اجازه ندید قدیمی بودن ساخت فیلم مانع از دیدن اون بشه! فیلم روایت فردی قاتل که آدم‌های بد رو به شکل فجیع می‌کشه. به تدریج و از قتل دوم سوم به بعد دو کارگاه اصلی متوجه میشن که قتل‌ها سریالی هستند و انتخاب اونها براساس هفت گناه کبیره‌ست. همین مورد باعث میشه ادم ناخودآگاه موردهای وطنی در ذهنش تداعی بشه. مواردی که قاتل، مجازات مقتول رو وظیفه‌ای الهی میدونه، شخصا تصمیم به مجازات فرد خاطی میگیره. برای  پنج عدد از این گناهان شامل شکم‌پرستی Gluttony، طمع Greed، کاهلی Sloth، شهوت Lust و تکبر Pride، قاتل، آدم‌های مورد دار رو انتخاب میکنه و به سزای عملشون می‌رسونه و همین باعث میشه آدم با قاتل در ابتدا خیلی همزادپنداری کنه.  در میانه قتل‌ها،‌ دو کارگاه اصلی تا دو قدمی قاتل نیز می‌رسن که همین نحوه رسیدنش هم در نوع خودش خیلی جالبه! اونها اول حدس میزنن که قاتل چه کتابی رو داخل کتابخونه میره میخونه و بعد با استفاده از اطلاعاتی که FBI به شکل غیرقانونی از کتابخونه ها جمع‌آوری میکنه، به موقعیت قاتل پی می‌برند! کتابخونه جایی که اطلاعات شخصی مثل تلفن و ادرس محل خونه رو مجبورید برای عضو شدن و گرفتن کتاب تحویل بدید اینطوری میشه از رو سلیقه فرد کتابخوان به فردی مظنون شد!</p>
<figure id="attachment_2693" aria-describedby="caption-attachment-2693" style="width: 828px" class="wp-caption aligncenter"><img decoding="async" class="size-full wp-image-2693" src="http://www.novid.ir/wp-content/uploads/2017/10/seven.jpeg" alt="فیلم هفت " width="828" height="1280" /><figcaption id="caption-attachment-2693" class="wp-caption-text">هفت</figcaption></figure>
<p>فیلم از جایی زیبا میشه و به اوج خودش میرسه که قاتل با پای خودش میاد و خودش رو معرفی میکنه! در حالیکه هنوز دو گناه بزرگ مونده که هیچ فردی بخاطرش مجازات نشده! یکی گناه <strong>خشم</strong> Wrath و دیگری گناه <strong>حسادت</strong> Envy. قاتل بعد از معرفی خودش به پلیس درخواست میکنه که به همراه دو  کارگاه اصلی فیلم به محلی بره که به گفته خودش قراره پرده از قتل ششم برداشته بشه! در انتهای فیلم اینطور میشه برداشت کرد که قاتل خودش دچار گناه حسادت شده. حسادت به کارگاه پلیس، بخاطر همسر خوبی که داشته و برای همین زن کارگاه  میلز رو  از تنش جدا میکنه و در انتها کاری میکنه که کارگاه میلز اون رو بکشه و به این ترتیب فردی که مرتکب حسادت میشه هم به سرانجام کار خودش میرسه! اما این وسط کارگاه میلز که مرتکب گناه خشم شده و قاتل رو کشته، تنها فردی که زنده می‌مونه.</p>
<p>یکی از بهترین دیالوگ‌های فیلم جایی که کارگاه میلز به قاتل میگه تو مسیح نیستی، در بهترین حالت فیلم برتر هفته یا یک تی‌شرت هستی که یکی دو روز تن ملت می‌شی و بعدش تمام!</p>
<p dir="ltr">You&#8217;re no messiah. You&#8217;re a movie of the week. You&#8217;re a fucking t-shirt, at best.</p>
<p>&nbsp;</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.novid.ir/2692/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>کشتن همه‌ی پروسس های دیتابیس mysql</title>
		<link>https://www.novid.ir/2690/</link>
					<comments>https://www.novid.ir/2690/#comments</comments>
		
		<dc:creator><![CDATA[novid]]></dc:creator>
		<pubDate>Sun, 20 Aug 2017 12:46:32 +0000</pubDate>
				<category><![CDATA[لینوکس]]></category>
		<category><![CDATA[kill]]></category>
		<category><![CDATA[mariadb]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[دیتابیس]]></category>
		<category><![CDATA[ماریادی‌بی]]></category>
		<category><![CDATA[پروسس]]></category>
		<guid isPermaLink="false">http://www.novid.ir/?p=2690</guid>

					<description><![CDATA[سلام گاهی به دلیل یک اشتباه در برنامه و اجرای یک کوئری ناصحیح حجم انبوهی از کوئری‌ها که پاسخشون خیلی زمانبر به سمت دیتابیس سرازیر میشه. در این مواقع بهتر جای اینکه کل دیتابیس رو استاپ کنید، پروسس‌های داخلی اون رو فقط kill کنید. دلیل اینکار اینه که استاپ یک دیتابیس سنگین کار بسیار هزینه‌بری [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>سلام</p>
<p>گاهی به دلیل یک اشتباه در برنامه و اجرای یک کوئری ناصحیح حجم انبوهی از کوئری‌ها که پاسخشون خیلی زمانبر به سمت دیتابیس سرازیر میشه. در این مواقع بهتر جای اینکه کل دیتابیس رو استاپ کنید، پروسس‌های داخلی اون رو فقط kill کنید. دلیل اینکار اینه که استاپ یک دیتابیس سنگین کار بسیار هزینه‌بری است.</p><pre class="urvanov-syntax-highlighter-plain-tag">mysqladmin processlist -u root -pPassword | awk '$2 ~ /^[0-9]/ {print "KILL "$2";"}' | mysql -u debian-sys-maint -pPassword</pre><p>اگر همچین دستوری رو روی یک دیتابیس slave بزنید، یادتون نره که باید مجدد وارد دیتابیس بشید و کاری کنید که کارش رو ادامه بده (START SLAVE) در غیر اینصورت دیتابیس از سینک خارج خواهد شد.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.novid.ir/2690/feed/</wfw:commentRss>
			<slash:comments>3</slash:comments>
		
		
			</item>
		<item>
		<title>haproxy و ردیس کلاستر</title>
		<link>https://www.novid.ir/2685/</link>
					<comments>https://www.novid.ir/2685/#comments</comments>
		
		<dc:creator><![CDATA[novid]]></dc:creator>
		<pubDate>Tue, 08 Aug 2017 11:21:13 +0000</pubDate>
				<category><![CDATA[linux]]></category>
		<category><![CDATA[docker]]></category>
		<category><![CDATA[haproxy]]></category>
		<category><![CDATA[redis]]></category>
		<category><![CDATA[ردیس]]></category>
		<category><![CDATA[ردیس کلاستر]]></category>
		<category><![CDATA[سرور]]></category>
		<category><![CDATA[لودبالانس]]></category>
		<guid isPermaLink="false">http://www.novid.ir/?p=2685</guid>

					<description><![CDATA[ردیس یک محدودیت خیلی مهمی داره و اون اینکه single thread  و برای همین نمی‌تونه  بیشتر از  یک core از پردازشگر رو استفاده کنه. یکی از راه‌حل‌های روتین استفاده از کلاستر ردیس که عملا اطلاعات بین چند node ردیس پخش میشه(sharding)‌. نکته مهم اینه که در این مدل شما چند نود ردیس به شکل master [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>ردیس یک محدودیت خیلی مهمی داره و اون اینکه single thread  و برای همین نمی‌تونه  بیشتر از  یک core از پردازشگر رو استفاده کنه. یکی از راه‌حل‌های روتین استفاده از <a href="https://redis.io/topics/cluster-tutorial">کلاستر ردیس</a> که عملا اطلاعات بین چند node ردیس پخش میشه(sharding)‌. نکته مهم اینه که در این مدل شما چند نود ردیس به شکل master  دارید که هر کدوم از اونها باید دست کم یک slave داشته باشند تا در صورتیکه یک نود به هر دلیل از دسترس خارج شد، نود slave به صورت خودکار وارد بازی بشه.</p>
<p>در این پروسه  هیچ تضمینی برای اینکه اطلاعات از دست نره (در زمان از دست رفتن نود master)‌ وجود نداره! دلیلش اینه که شما اطلاعات رو روی node مستر می‌نویسید، نود مستر به کلاینت میگه اوکی دیتا رو دارم و بعد تازه میره دنبال اینکه دیتا  روی نود slave هم ذخیره بشه. :)‌</p>
<p>این رو هم بگم که برای اینکه دیتا به شکل مساوی بین node های مستر پخش بشه، کلاستر ردیس از چیزی به اسم SLOT استفاده میکنه. در مجموع 16384 اسلات ردیس کلاستر داره که بسته به تعداد node هایی که داریم میاییم اسلات ها رو بین نودها تقسیم میکنیم.</p>
<p>کلاینت در صورتی که به یک node (مستر) درخواست بده واطلاعات روی اون  نباشه، بجای اینکه کلید درخواستی رو بده، اطلاعات nodeی رو  که کلید داره رو میده و دوباره کلاینت باید به اون دومی درخواست بده :)  و  این میشه همون سربار یا overhead که <strong>ردیس کلاستر</strong> به ردیس معمولی داره بعلاوه اینکه یک سری محدودیت ها رو هم خواهید داشت مثل اینکه نمیشه از قابلیت Geo location ردیس استفاه کنید .</p>
<p>حالا نکته اینجاس که اگر کلاینت به یک نود مستر وصل شه و اون نود به هر دلیل داون بشه، هر چند slave به شکل خودکار تبدیل به مستر میشه، اما دیگه کلاینت از اون نود اطلاعی نداره!‌ برای حل این مشکل از لودبالانس HAPROXY استفاده میکنیم.</p>
<p>خودم haproxy رو به دلایل خیلی زیادی با داکر همیشه بالا میارم که کار رو خیلی ساده میکنه و برای اینکار هم لازم نیست همه چی رو از اول بسازیم، از یک داکر اماده استفاده میکنیم.</p><pre class="urvanov-syntax-highlighter-plain-tag">git clone https://github.com/nuved/docker-haproxy-letsencrypt.git</pre><p>و بعد باید اون رو build کنیم.</p><pre class="urvanov-syntax-highlighter-plain-tag">docker build -t ha .</pre><p>قبل از اجرای تنظیمات باید یک کانفیگ haproxy ایجاد کنیم که اون رو به خورد کانتینر بدیم.</p><pre class="urvanov-syntax-highlighter-plain-tag">vi /etc/haproxy/haproxy.cfg

global
    log /dev/log local0 info
    log /dev/log local1 notice
    chroot /var/lib/haproxy
    group haproxy
    stats socket /run/haproxy/admin.sock mode 660 level admin
    stats timeout 30s
    maxconn 2000000
    nbproc 6
    cpu-map 1 1
    cpu-map 2 2
    cpu-map 3 3
    cpu-map 4 4
    cpu-map 5 5
    cpu-map 6 6

defaults REDIS
    log global
    mode tcp
    timeout connect  3s
    timeout client   6s
    timeout server   6s

frontend ft_redis
  bind 172.17.77.34:6379 name redis
  maxconn 2000000
  default_backend bk_redis
  mode tcp
  option tcplog

backend bk_redis
 option tcp-check
 tcp-check send PING\r\n
 tcp-check expect string +PONG
 tcp-check send info\ replication\r\n
 tcp-check expect string role:master
 tcp-check send QUIT\r\n
 tcp-check expect string +OK
 server redis-49-6380 172.17.77.49:6380 check inter 1s
 server redis-47-6379 172.17.77.47:6379 check inter 1s
 server redis-48-6379 172.17.77.48:6379 check inter 1s
 server redis-49-6379 172.17.77.49:6379 check inter 1s
 server redis-48-6380 172.17.77.48:6380 check inter 1s
 server redis-47-6380 172.17.77.47:6380 check inter 1s



listen stats
    bind 172.17.77.34:1936
    mode http
    stats hide-version
    stats enable
    stats uri /
    stats realm HAProxyStatistics
    stats auth novid:password</pre><p>بخش frontend باعث میشه haproxy روی پورت  6379 لیستن کنه و هر ترافیکی هم که به سمتش بیاد رو به  backend پیشفرضی که تعریف کردیم، بفرسته.</p>
<p>در بخش backend که قلب اصلی سیستم، haproxy  به نودهای فقط master ترافیک رو می‌فرسته. نکته قشنگ کار اینه که در اینجا همه نود های redis چه مستر و چه slave رو میدیم و از haproxy میخوایم بره وضعیت نودها رو خوش در بیاره. haproxy هم هر یک ثانیه میره از نودهای ردیس میپرسه که شما مسترسی یا salve  و اونها هم اگر جواب بدند مستر، به رنگ سبز در میان و اگر slave باشند دیگه از دور خارج میشند و عملا ترافیکی به سمت اونها نمیره :)</p>
<p>در بخش stats هم که صرفا امار haproxy رو فعال کردیم و کار مهمی انجام نمیده، بخش اول nbproc هم نمایانگر تعداد core های سرور و اینجا با فرض اینکه سرور هفت core پردازشی داره، شش تا از اونها رو بدین شکل به خورد haproxy میدیم :) haproxy هم مشابه nginx میاد به تعداد core هایی که مشخص کردیم child میسازه.</p><pre class="urvanov-syntax-highlighter-plain-tag">root      1365  0.0  0.4 356360  4248 ?        Sl   05:15   0:00      \_ docker-containerd-shim a260b62f4a7fdc12df941a3747cda7580233c47f26a3a60b0dfa3ff2e4561665 /var/run/docker/libcontainerd/a260b62f4a7fdc12df941a3747cda7580233c47f26a3a60b0dfa3ff2e4561665 docker-runc
root      1383  0.0  0.0  17980   536 ?        Ss   05:15   0:00          \_ /bin/bash /entrypoint.sh
root      1406 17.6  0.1 184696  1312 ?        Ssl  05:15  62:43              \_ /usr/sbin/rsyslogd
root      1913 17.9  0.8 227584  8524 ?        Ss   05:27  61:25              \_ haproxy -f /etc/haproxy/haproxy.cfg -D -p /var/run/haproxy.pid -sf 44 45 46 47 48
root      1914 40.3  0.8 228788  8844 ?        Rs   05:27 137:50              \_ haproxy -f /etc/haproxy/haproxy.cfg -D -p /var/run/haproxy.pid -sf 44 45 46 47 48
root      1915  9.4  0.7 227040  8084 ?        Ss   05:27  32:25              \_ haproxy -f /etc/haproxy/haproxy.cfg -D -p /var/run/haproxy.pid -sf 44 45 46 47 48
root      1916 12.0  0.7 227312  8020 ?        Ss   05:27  41:15              \_ haproxy -f /etc/haproxy/haproxy.cfg -D -p /var/run/haproxy.pid -sf 44 45 46 47 48
root      1917 29.6  0.8 228508  8336 ?        Ss   05:27 101:15              \_ haproxy -f /etc/haproxy/haproxy.cfg -D -p /var/run/haproxy.pid -sf 44 45 46 47 48
root      1918  8.5  0.7 226068  7820 ?        Ss   05:27  29:18              \_ haproxy -f /etc/haproxy/haproxy.cfg -D -p /var/run/haproxy.pid -sf 44 45 46 47 48
root      1921  0.0  0.0   6356    84 ?        S    05:27   0:00              \_ inotifywait -q -r --exclude \.git/ -e modify,create,delete,move,move_self /etc/haproxy/haproxy.cfg /etc/letsencrypt</pre><p>و در نهایت داکر ha رو با کامند زیر اجرا می‌کنیم.</p><pre class="urvanov-syntax-highlighter-plain-tag">docker run -d  --name=haproxy  --ulimit nofile=4500000:4500000  -v /var/lib/haproxy:/var/lib/haproxy -v /etc/haproxy/haproxy.cfg:/etc/haproxy/haproxy.cfg  -v /dev/log:/dev/log --net=host ha</pre><p>یک قابلیت خوب این کانتینر اینه که میشه کانفیگ haproxy روی سرور اصلی رو ویرایش کرد، کانتینر به شکل خودکار متوجه این امر میشه و در صورتی که مشکلی در سینتکس وجود نداشته باشه، تغییر رو اعمال میکنه. برای اینکه از این قابلیت استفاده کنید باید تغییری در ادیتور vim بدیم.</p>
<p>&nbsp;</p><pre class="urvanov-syntax-highlighter-plain-tag">vi /root/.vimrc

set backupcopy=yes</pre><p>و در نهایت اینکه اگر سرورتون زیر بار خیلی زیادی حتما تنظیمات زیر داخل sysctl فراموش نشه.</p><pre class="urvanov-syntax-highlighter-plain-tag">vi /etc/sysctl.conf

vm.swappiness=5


fs.file-max = 10000000
fs.nr_open = 10000000
net.ipv4.tcp_mem = 786432 1697152 1945728
net.ipv4.tcp_rmem = 4096 4096 16777216
net.ipv4.tcp_wmem = 4096 4096 16777216

net.ipv4.ip_local_port_range = 1000 65535
net.nf_conntrack_max = 1200000
net.netfilter.nf_conntrack_tcp_timeout_time_wait = 15</pre><p>&nbsp;</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.novid.ir/2685/feed/</wfw:commentRss>
			<slash:comments>4</slash:comments>
		
		
			</item>
		<item>
		<title>مقایسه‌ی سه هارد ssd</title>
		<link>https://www.novid.ir/2680/</link>
					<comments>https://www.novid.ir/2680/#respond</comments>
		
		<dc:creator><![CDATA[novid]]></dc:creator>
		<pubDate>Sun, 06 Aug 2017 11:13:28 +0000</pubDate>
				<category><![CDATA[لینوکس]]></category>
		<category><![CDATA[ssd]]></category>
		<category><![CDATA[بنچمارک]]></category>
		<category><![CDATA[هارد]]></category>
		<guid isPermaLink="false">http://www.novid.ir/?p=2680</guid>

					<description><![CDATA[در این مطلب سه هارد ssd مدل اینتل VK0480GEYJR (تحت برند HPE)  و سامسونگ مدل MZ7KM480 و   SSD 960 PRO 512GB رو مقایسه می‌کنیم. دو مدل اول به ریدکنترلر متصل هستند و برای دیدن نتایج واقعی  cahce ریدکنترلر خاموش است. مدل سوم روی pci express سرور سوار  است و فقط os اون رو می‌بینه. دو  تست روی [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>در این مطلب سه هارد ssd مدل اینتل VK0480GEYJR (تحت برند HPE)  و سامسونگ مدل MZ7KM480 و   <a href="http://www.samsung.com/semiconductor/minisite/ssd/product/consumer/ssd960.html">SSD 960</a> PRO 512GB رو مقایسه می‌کنیم.</p>
<figure id="attachment_2682" aria-describedby="caption-attachment-2682" style="width: 900px" class="wp-caption aligncenter"><img loading="lazy" decoding="async" class="wp-image-2682 size-full" src="http://www.novid.ir/wp-content/uploads/2017/08/de_MZ-7KM480E_003_L-perspective_black.jpeg" alt="" width="900" height="600" /><figcaption id="caption-attachment-2682" class="wp-caption-text">MZ7KM480</figcaption></figure>
<p>دو مدل اول به ریدکنترلر متصل هستند و برای دیدن نتایج واقعی  cahce ریدکنترلر خاموش است. مدل سوم روی pci express سرور سوار  است و فقط os اون رو می‌بینه.</p>
<p>دو  تست روی هاردهای ssd انجام می‌دیم.در تست اول برای کاری که تخصص دارند و اون نوشتن و خواندن Random هست و دیگری حالت Sequential که برای دیسک‌های معمولی هم کار راحتی و معمولا حیف برای اینجور کارها بخوایم از ssd استفاده کنیم.</p>
<h6>هارد ssd اینتل</h6>
<p></p><pre class="urvanov-syntax-highlighter-plain-tag">fio --randrepeat=1 --ioengine=libaio --direct=1 --gtod_reduce=1 --name=test --filename=test --bs=4k --iodepth=64 --size=4G --readwrite=randrw --rwmixread=75
test: (g=0): rw=randrw, bs=4K-4K/4K-4K/4K-4K, ioengine=libaio, iodepth=64
fio-2.2.10
Starting 1 process
Jobs: 1 (f=1): [m(1)] [100.0% done] [188.4MB/64520KB/0KB /s] [48.3K/16.2K/0 iops] [eta 00m:00s]
test: (groupid=0, jobs=1): err= 0: pid=14143: Sun Aug  6 15:16:46 2017
  read : io=3071.7MB, bw=192038KB/s, iops=48009, runt= 16379msec
  write: io=1024.4MB, bw=64040KB/s, iops=16010, runt= 16379msec
  cpu          : usr=8.89%, sys=45.45%, ctx=361045, majf=0, minf=605
  IO depths    : 1=0.1%, 2=0.1%, 4=0.1%, 8=0.1%, 16=0.1%, 32=0.1%, &gt;=64=100.0%
     submit    : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, &gt;=64=0.0%
     complete  : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.1%, &gt;=64=0.0%
     issued    : total=r=786347/w=262229/d=0, short=r=0/w=0/d=0, drop=r=0/w=0/d=0
     latency   : target=0, window=0, percentile=100.00%, depth=64

Run status group 0 (all jobs):
   READ: io=3071.7MB, aggrb=192037KB/s, minb=192037KB/s, maxb=192037KB/s, mint=16379msec, maxt=16379msec
  WRITE: io=1024.4MB, aggrb=64040KB/s, minb=64040KB/s, maxb=64040KB/s, mint=16379msec, maxt=16379msec

Disk stats (read/write):
  sdc: ios=773774/258385, merge=1358/173, ticks=794948/222572, in_queue=1017672, util=99.46%</pre><p>نکته اول اینکه با fio سعی کردیم حالت واقعی سرور رو شبیه‌سازی کنیم 75 درصد read و 25 درصد write. مهمترین بخش هم iops هست.</p>
<p><strong>iops=48009 برای read و iops=16010 برای رایت.</strong></p>
<p>برای تست دوم از dd استفاده میکنیم. نکته مهم اینه که oflag=dsync   به ازای هر تیکه‌ای که میخواد روی هارد بنویسه (۵۱۲ بار می‌پرسه) تاییدیه از os میگره. اما conv=fdatasync تنها یکبار در انتهای نوشتن و هنگام خروج از dd تاییدیه از os گرفته میشه.</p><pre class="urvanov-syntax-highlighter-plain-tag">dd if=/dev/zero of=novid bs=1M count=512 oflag=dsync
512+0 records in
512+0 records out
536870912 bytes (537 MB, 512 MiB) copied, 1.96172 s, 274 MB/s

dd if=/dev/zero of=novid bs=1M count=512 conv=fdatasync
512+0 records in
512+0 records out
536870912 bytes (537 MB, 512 MiB) copied, 1.45621 s, 369 MB/s</pre><p>&nbsp;</p>
<h6>هارد ssd سامسونگ مدل MZ7KM480</h6>
<p></p><pre class="urvanov-syntax-highlighter-plain-tag">fio --randrepeat=1 --ioengine=libaio --direct=1 --gtod_reduce=1 --name=test --filename=test --bs=4k --iodepth=64 --size=4G --readwrite=randrw --rwmixread=75
test: (g=0): rw=randrw, bs=4K-4K/4K-4K/4K-4K, ioengine=libaio, iodepth=64
fio-2.2.10
Starting 1 process
Jobs: 1 (f=1): [m(1)] [100.0% done] [266.7MB/90880KB/0KB /s] [68.3K/22.8K/0 iops] [eta 00m:00s]
test: (groupid=0, jobs=1): err= 0: pid=14225: Sun Aug  6 15:24:17 2017
  read : io=3071.7MB, bw=271248KB/s, iops=67811, runt= 11596msec
  write: io=1024.4MB, bw=90455KB/s, iops=22613, runt= 11596msec
  cpu          : usr=14.08%, sys=52.78%, ctx=768554, majf=0, minf=605
  IO depths    : 1=0.1%, 2=0.1%, 4=0.1%, 8=0.1%, 16=0.1%, 32=0.1%, &gt;=64=100.0%
     submit    : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, &gt;=64=0.0%
     complete  : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.1%, &gt;=64=0.0%
     issued    : total=r=786347/w=262229/d=0, short=r=0/w=0/d=0, drop=r=0/w=0/d=0
     latency   : target=0, window=0, percentile=100.00%, depth=64

Run status group 0 (all jobs):
   READ: io=3071.7MB, aggrb=271247KB/s, minb=271247KB/s, maxb=271247KB/s, mint=11596msec, maxt=11596msec
  WRITE: io=1024.4MB, aggrb=90454KB/s, minb=90454KB/s, maxb=90454KB/s, mint=11596msec, maxt=11596msec

Disk stats (read/write):
  sdb: ios=771941/257788, merge=1231/167, ticks=552804/164876, in_queue=722248, util=99.45%</pre><p><strong>iops=67811 برای read و iops=22613</strong> برای رایت. که نشون میده در میون هاردهای ssd سرور  سامسونگ از مدل اینتل پیشی گرفته.</p><pre class="urvanov-syntax-highlighter-plain-tag">dd if=/dev/zero of=novid bs=1M count=512 oflag=dsync
512+0 records in
512+0 records out
536870912 bytes (537 MB, 512 MiB) copied, 1.86999 s, 287 MB/s

dd if=/dev/zero of=novid bs=1M count=512 conv=fdatasync
512+0 records in
512+0 records out</pre><p>در این تست هم سامسونگ برنده شده.</p>
<p>&nbsp;</p>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-2683" src="http://www.novid.ir/wp-content/uploads/2017/08/photo_2017-08-06_15-41-40.jpg" alt="" width="720" height="1280" /></p>
<p>و اما مدل دیگه سامسونگ pro 960 که از پیش حدس می‌زنیم سرعت خیلی بالاتری داشته باشه.</p>
<h6>سامسونگ pro 960</h6>
<p></p><pre class="urvanov-syntax-highlighter-plain-tag">fio --randrepeat=1 --ioengine=libaio --direct=1 --gtod_reduce=1 --name=test --filename=test --bs=4k --iodepth=64 --size=4G --readwrite=randrw --rwmixread=75
test: (g=0): rw=randrw, bs=4K-4K/4K-4K/4K-4K, ioengine=libaio, iodepth=64
fio-2.2.10
Starting 1 process
test: Laying out IO file(s) (1 file(s) / 4096MB)
Jobs: 1 (f=1): [m(1)] [75.0% done] [719.6MB/240.2MB/0KB /s] [184K/61.5K/0 iops] [eta 00m:01s]

Jobs: 1 (f=1): [m(1)] [100.0% done] [690.4MB/229.5MB/0KB /s] [177K/58.8K/0 iops] [eta 00m:00s]

test: (groupid=0, jobs=1): err= 0: pid=14313: Sun Aug  6 15:33:11 2017
  read : io=3071.7MB, bw=705402KB/s, iops=176350, runt=  4459msec
  write: io=1024.4MB, bw=235236KB/s, iops=58808, runt=  4459msec
  cpu          : usr=19.47%, sys=70.17%, ctx=27594, majf=0, minf=367
  IO depths    : 1=0.1%, 2=0.1%, 4=0.1%, 8=0.1%, 16=0.1%, 32=0.1%, &gt;=64=100.0%
     submit    : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, &gt;=64=0.0%
     complete  : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.1%, &gt;=64=0.0%
     issued    : total=r=786347/w=262229/d=0, short=r=0/w=0/d=0, drop=r=0/w=0/d=0
     latency   : target=0, window=0, percentile=100.00%, depth=64

Run status group 0 (all jobs):
   READ: io=3071.7MB, aggrb=705402KB/s, minb=705402KB/s, maxb=705402KB/s, mint=4459msec, maxt=4459msec
  WRITE: io=1024.4MB, aggrb=235235KB/s, minb=235235KB/s, maxb=235235KB/s, mint=4459msec, maxt=4459msec

Disk stats (read/write):
  nvme0n1: ios=766260/255818, merge=0/0, ticks=182612/2688, in_queue=185564, util=97.90%</pre><p>این هارد خوب <strong>iops=176350</strong> برای read و <strong>iops=58808</strong> رو برای نوشتن به ما میده که البته فاصله خیلی زیادی با اعدادی داره که سامسونگ ادعا میکنه :)‌</p><pre class="urvanov-syntax-highlighter-plain-tag">dd if=/dev/zero of=novid bs=1M count=512 oflag=dsync
512+0 records in
512+0 records out
536870912 bytes (537 MB, 512 MiB) copied, 3.57902 s, 150 MB/s

dd if=/dev/zero of=novid bs=1M count=512 conv=fdatasync
512+0 records in
512+0 records out
536870912 bytes (537 MB, 512 MiB) copied, 0.635125 s, 845 MB/s</pre><p>و در کمال تعجب میشه دید که این ssd  در حالت sequential خیلی هم خوب کار نمیکنه :)</p>
<p>&nbsp;</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.novid.ir/2680/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>