You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

531 lines
18 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

<!doctype html>
<html class="no-js" lang="tw">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="author" content="Eric Chang">
<meta name="description" content="Whats the Worst That Could Happen?">
<meta name="keywords" content="linux,blog,responsive,search,font awesome,pages,posts,multilingual,highlight.js,syntax highlighting,premium,shortcuts">
<meta content="" name="keywords">
<meta name="generator" content="Hugo 0.50" />
<title> [筆記] inxi 蒐集詳盡的硬體資訊 / inxi Collect Detail Hardware Info | MCの飄狂山莊㊣</title>
<meta name="description" content="[筆記] inxi 蒐集詳盡的硬體資訊 / inxi Collect Detail Hardware Info - Whats the Worst That Could Happen?">
<meta itemprop="name" content="[筆記] inxi 蒐集詳盡的硬體資訊 / inxi Collect Detail Hardware Info">
<meta itemprop="description" content="[筆記] inxi 蒐集詳盡的硬體資訊 / inxi Collect Detail Hardware Info - Whats the Worst That Could Happen?">
<meta property="og:title" content="[筆記] inxi 蒐集詳盡的硬體資訊 / inxi Collect Detail Hardware Info">
<meta property="og:description" content="[筆記] inxi 蒐集詳盡的硬體資訊 / inxi Collect Detail Hardware Info - Whats the Worst That Could Happen?">
<meta property="og:image" content="https://h.cowbay.org/images/post-default-10.jpg">
<meta property="og:url" content="https://h.cowbay.org/post/inx-collect-detail-hardware-info/">
<meta property="og:site_name" content="MCの飄狂山莊㊣">
<meta property="og:type" content="article">
<link rel="icon" type="image/png" href="https://h.cowbay.org/favicon-32x32.png" sizes="32x32">
<link rel="icon" type="image/png" href="https://h.cowbay.org/favicon-16x16.png" sizes="16x16">
<link rel="stylesheet" href="https://h.cowbay.org/sass/combined.min.a89dfa577f701bffe9659f476ef61241cb2a3452b913e793463b0074a10c0a59.css">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css">
</head>
<body class="bilberry-hugo-theme">
<nav class="permanentTopNav">
<div class="container">
<ul class="topnav">
</ul>
<div id="search-box" class="search">
<i class="fa fa-search"></i>
<input id="search" type="text" placeholder="">
</div>
</div>
</nav>
<header>
<div class="container">
<div class="logo">
<a href="/" class="logo">
<img src="https://www.gravatar.com/avatar/e4eb1f8e016ffb73e9889f87d16e15f0?d=mm&size=200" alt="">
<span class="overlay"><i class="fa fa-home"></i></span>
</a>
</div>
<div class="titles">
<h3 class="title"><a href="/">MCの飄狂山莊㊣</a></h3>
<span class="subtitle">Whats the Worst That Could Happen?</span>
</div>
<div class="toggler permanentTopNav">
<i class="fa fa-bars" aria-hidden="true"></i>
</div>
</div>
</header>
<div class="main container">
<div class="article-wrapper u-cf single">
<a class="bubble" href="/post/inx-collect-detail-hardware-info/">
<i class="fa fa-fw fa-pencil"></i>
</a>
<article class="default article">
<div class="featured-image">
<a href="/post/inx-collect-detail-hardware-info/">
<img src="/images/post-default-10.jpg" alt="">
</a>
</div>
<div class="content">
<h3><a href="/post/inx-collect-detail-hardware-info/">[筆記] inxi 蒐集詳盡的硬體資訊 / inxi Collect Detail Hardware Info</a></h3>
<div class="meta">
<span class="date moment">2019-04-23</span>
<span class="categories">
<a href="/categories/%E7%AD%86%E8%A8%98">筆記</a>
</span>
<span class="author"><a href="/author/eric-chang">Eric Chang</a></span>
</div>
<p>最近因為一直碰到硬碟故障的問題算起來那一批同時購買的5X顆 seagate 2T硬碟已經有一半以上故障返修了&hellip;.</p>
<p>然後又因為一直沒有添購新的硬碟,只能用這些快過保/已過保的撐著</p>
<p>所以最近不斷的在更換機器內的硬碟,而且還沒有熱插拔!</p>
<p>也導致原本負責處理盤點資產的同事困擾,因為跟手邊的紀錄已經對不起來了</p>
<p>然後就變成要對資產的時候,需要一台一台登入,然後去下不同的指令,取得想要的硬體資訊,超級麻煩的!</p>
<p></p>
<p>幾次之後終於決定透過ansible來做這件事</p>
<p>一開始的想法很簡單,就用 lshw/dmidecode這些指令去做</p>
<p>可是因為手邊的機器有ubuntu 18.04/16.04/14.04 , Debian 9 , Proxmox (based on debian ) , CentOS , FreeNAS</p>
<p>而有些系統預設沒有 lshw / dmidecode (對FreeNAS 就是說你)</p>
<p>所以變成要依照系統不同去下不同的指令雖然都是ansible在跑但是看到playbook的內容就很煩啊</p>
<p>然後就不小心讓我翻到了 inxi 這個指令,根本就是救星啊!</p>
<p>直接來看輸出的範例</p>
<p><img src="http://i.imgur.com/OSx9cnz.png" alt="sample of inxi output" /></p>
<p>有沒有,是不是很優!</p>
<p>而且簡單易懂,還能抓到同事想看的資料,像是廠牌、型號、序號、記憶體類型(DDR2/3/4)</p>
<p>所以馬上捨棄 lshw/dmidecode ,改用 inxi 來跑</p>
<p>ansible role 的內容也很簡單</p>
<p>就偵測完之後,把結果送出給設定好的收件人</p>
<p>只是因為系統不同,大致上要分成 ubuntu/debian/centos 以及 freebsd 兩種</p>
<p>所以同樣的task 要跑兩次一個要帶sudo 一個不用帶</p>
<p>然後BSD系列的機器在inventory 裡面要帶入 ansible_ssh_user</p>
<p>就這樣,沒有什麼太困難的</p>
<pre><code class="language-YAML">######### use inxi instead ##################
- name: copy inxi binary to remote Ubnutu/Debian
become: yes
become_method: sudo
copy:
src: inxi
dest: /usr/local/bin/inxi
mode: a+rx,u+rwx
when: ansible_distribution == &quot;Ubuntu&quot; or ansible_distribution == &quot;Debian&quot; or ansible_distribution == &quot;CentOS&quot;
- name: copy inxi binary to remote FreeBSD
copy:
src: inxi
dest: /usr/local/bin/inxi
mode: a+rx,u+rwx
when: ansible_distribution == &quot;FreeBSD&quot;
- name: run inxi to collect Ubuntu/Debian hardware info
become: yes
become_method: sudo
shell: &quot;/usr/local/bin/inxi -c -Dxx -C -m -Z&quot;
register: du_hw_info
when: ansible_distribution == &quot;Ubuntu&quot; or ansible_distribution == &quot;Debian&quot; or ansible_distribution == &quot;CentOS&quot;
- name: run inxi to collect FreeBSD hardware info
shell: &quot;/usr/local/bin/inxi -c -Dxx -C -m -Z&quot;
register: bsd_hw_info
when: ansible_distribution == &quot;FreeBSD&quot;
- name: set Ubuntu/Debian inventory file
template:
src: etc/inventory.txt.j2
dest: &quot;/tmp/{{ ansible_hostname }}_inventory.txt&quot;
mode: a+r,u+rw
when: ansible_distribution == &quot;Ubuntu&quot; or ansible_distribution == &quot;Debian&quot; or ansible_distribution == &quot;CentOS&quot;
- name: set FreeBSD inventory file
template:
src: etc/freenas_inventory.txt.j2
dest: &quot;/tmp/{{ ansible_hostname }}_inventory.txt&quot;
mode: a+r,u+rw
when: ansible_distribution == &quot;FreeBSD&quot;
- name: send inventory file via mail
tags: mail
mail:
host: 192.168.11.173
port: 25
secure: starttls
subject: &quot;{{ ansible_hostname }} inventory file&quot;
from: ansible
to: &quot;{{ recipient }}&quot;
#body: &quot;{{ mail_body.stdout_lines }}&quot;
attach: &quot;/tmp/{{ ansible_hostname }}_inventory.txt&quot;
</code></pre>
<p>inventory 內容</p>
<pre><code>hqs01.abc.com ansible_ssh_host=192.168.11.1
hqs210.abc.com
hqs230.abc.com
hqs231.abc.com
hqs234.abc.com
hqs03.abc.com
hqs020.abc.com
hqs019.abc.com
hqs010.abc.com
hqs05.abc.com
hqs173.abc.com
###BSD Hosts ###
hqs099.abc.com ansible_ssh_host=192.168.11.99 ansible_ssh_port=22 ansible_ssh_user=root
hqs202.abc.com ansible_ssh_host=192.168.11.202 ansible_ssh_port=22 ansible_ssh_user=root
bbs089.abc.com ansible_ssh_host=192.168.0.89 ansible_ssh_user=root
</code></pre>
<p>ansible 又發揮了一次,另外,感覺這個指令可以用來寫資產管理系統耶&hellip;威力強大</p>
<p>而且又不用管作業系統是什麼,反正有執行檔,直接派過去 remote 端就好了!</p>
<p>真是讓我相見恨晚啊!</p>
</div>
<div class="footer">
<div class="tags">
<i class="fa fa-tags"></i>
<div class="links">
<a href="/tags/linux">linux</a>
<a href="/tags/bsd">bsd</a>
<a href="/tags/inventory">inventory</a>
</div>
</div>
</div>
</article>
</div>
<div id="disqus_thread"></div>
<script type="application/javascript">
var disqus_config = function () {
};
(function() {
if (["localhost", "127.0.0.1"].indexOf(window.location.hostname) != -1) {
document.getElementById('disqus_thread').innerHTML = 'Disqus comments not available by default when the website is previewed locally.';
return;
}
var d = document, s = d.createElement('script'); s.async = true;
s.src = '//' + "h-cowbay-org-1" + '.disqus.com/embed.js';
s.setAttribute('data-timestamp', +new Date());
(d.head || d.body).appendChild(s);
})();
</script>
<noscript>Please enable JavaScript to view the <a href="https://disqus.com/?ref_noscript">comments powered by Disqus.</a></noscript>
<a href="https://disqus.com" class="dsq-brlink">comments powered by <span class="logo-disqus">Disqus</span></a>
</div>
<footer>
<div class="container">
<div class="recent-posts">
<strong></strong>
<ul>
<li>
<a href="/post/do-no-use-10-0-0-0-private-ipaddr-in-gcp/">[筆記] 在gcp 中用wireguard建立VPN時不要用 10.0.0.0/16 網段/Do No Use 10 0 0 0 Private Ipaddr in GCP</a>
</li>
<li>
<a href="/post/multiple-site-to-site-vpn-using-wireguard/">[筆記] 透過 wireguard 建立多點 site to site VPN / Multiple Site to Site VPN Using Wireguard</a>
</li>
<li>
<a href="/post/site-to-site-vpn-using-wireguard-in-two-edgerouters/">[筆記] 在edgerouter上用wireguard 建立site to site VPN / Site to Site Vpn Using Wireguard in Two Edgerouters</a>
</li>
<li>
<a href="/post/another-way-to-keep-ansible-log/">[筆記] 為了保存log 用script 指令執行ansible / Another Way to Keep Ansible Log using script command</a>
</li>
<li>
<a href="/post/send-mail-to-notify-after-pxe-install/">[筆記] 用pxe 安裝系統,完成後送出郵件通知 / send mail notification after pxe install</a>
</li>
<li>
<a href="/post/ansible-run-task-depends-on-ipaddr/">[ansible] 用 ip 位置判斷是否要執行task /ansible run task depends on ipaddr</a>
</li>
<li>
<a href="/post/ansible-selectattr-from-list-in-dictionary/">[ansible] 引用事先定義好的yaml檔裡面的變數 - Ansible Selectattr From List in Dictionary file</a>
</li>
</ul>
</div>
<div class="categories">
<a href="/categories/"><strong></strong></a>
<ul>
<li>
<a href="/categories/%E7%AD%86%E8%A8%98">筆記 (24)</a>
</li>
<li>
<a href="/categories/ansible">Ansible (3)</a>
</li>
<li>
<a href="/categories/linux">Linux (1)</a>
</li>
<li>
<a href="/categories/proxmox">Proxmox (1)</a>
</li>
<li>
<a href="/categories/ps">Ps (1)</a>
</li>
<li>
<a href="/categories/%E7%A2%8E%E5%BF%B5">碎念 (1)</a>
</li>
<li>
<a href="/categories/%E7%BE%A4%E6%9A%89">群暉 (1)</a>
</li>
</ul>
</div>
<div class="right">
<div class="external-profiles">
<strong></strong>
<a href="https://www.facebook.com/mariahchang" target="_blank"><i class="fa fa-facebook-adblock-proof"></i></a>
<a href="https://twitter.com/changchichung" target="_blank"><i class="fa fa-twitter-adblock-proof"></i></a>
<a href="https://github.com/changchichung" target="_blank"><i class="fa fa-github"></i></a>
<a href="https://www.yapee.tw/mvc/onlinePay/webLink?key=lMC74kucH21JChCR77-wJ80ZZ-Poh11amP24BwiDdHw" target="_blank"><img border="0" src="https://www.yapee.tw/mvc/file/publicFile?pathType=data/linkLogo/B0S0F0002585.jpg"></img></a>
</div>
</div>
</div>
</footer>
<div class="credits">
<div class="container">
<div class="copyright">
<a href="https://github.com/Lednerb" target="_blank">
&copy;
2017
by Lednerb
</a>
</div>
<div class="author">
<a href="https://www.yapee.tw/mvc/onlinePay/webLink?key=lMC74kucH21JChCR77-wJ80ZZ-Poh11amP24BwiDdHw" target="_blank">Bilberry Hugo Theme</a>
</div>
</div>
</div>
<script type="application/javascript">
var doNotTrack = false;
if (!doNotTrack) {
window.ga=window.ga||function(){(ga.q=ga.q||[]).push(arguments)};ga.l=+new Date;
ga('create', 'UA-138954876-1', 'auto');
ga('send', 'pageview');
}
</script>
<script async src='https://www.google-analytics.com/analytics.js'></script>
<script type="text/javascript" src="https://h.cowbay.org/js/externalDependencies.39c47e10e241eae2947b3fe21809c572.js" integrity="md5-OcR&#43;EOJB6uKUez/iGAnFcg=="></script>
<script type="text/javascript" src="https://h.cowbay.org/js/theme.ff50ae6dc1bfc220b23bf69dbb41b54e.js" integrity="md5-/1CubcG/wiCyO/adu0G1Tg=="></script>
<script>
$(".moment").each(function() {
$(this).text(
moment( $(this).text() )
.locale( "tw" )
.format('LL')
);
});
$(".footnote-return sup").html("");
</script>
<script>
var client = algoliasearch("2XL0P8XDCY", "4ef65b37b627bb886b46c34a10e63aa6");
var index = client.initIndex("h_cowbay_org");
$('#search').autocomplete({ hint: false, autoselect: true, debug: false },
[
{
source: $.fn.autocomplete.sources.hits(index, { hitsPerPage: 10 }),
displayKey: function(suggestion) {
return suggestion.title || suggestion.author
},
templates: {
suggestion: function(suggestion) {
return "<span class='entry " + suggestion.type + "'>"
+ "<span class='title'>" + suggestion.title + "</span>"
+ "<span class='fa fa-fw " + suggestion.iconClass + "'></span>"
+ "</span>"
;
},
empty: function() {
return "<span class='empty'></span>"
},
footer: function() {
return '<div class="branding">Powered by <img src="https:\/\/h.cowbay.org\/dist\/algolia-logo-light.svg" /></div>'
}
},
}
])
.on('autocomplete:selected', function(event, suggestion, dataset) {
window.location = (suggestion.url);
})
.keypress(function (event, suggestion) {
if (event.which == 13) {
window.location = (suggestion.url);
}
});
</script>
</body>
</html>