星期五, 7月 07, 2017

btrfs and snapper in openSUSE Leap 42.2 調校嘗試

btrfs and snapper in openSUSE Leap 42.2 調校嘗試
OS: openSUSE Leap 42.2

使用 btrfs and snapper 會有因為高 I/O 所以 average load 高的現象,
所以目前嘗試調整第1階段

桌機用 SSD HD, 覺得就感覺有差, 有了之前的經驗( 全部的 partition 都用 btrfs ), 因為 btrfs 會作 snapper, 所以相對在計算上的 IO 就會....很恐怖.

目前的作法是,  根目錄 ( / )使用 btrfs, 然後資料的目錄( 例如 /home )用 XFS
  • 理由是 /home 或是資料目錄不會嚴重影響系統運作. 應該是用備份機制來處理

另外由於是 SSD, 所以容量是比較小的, 所以目前在我 / 目錄只切 40GB 狀況下, 之前有出現使用率 94% 的現象,  所有的使用量會再 /.snapshots 目錄下

使用 yast 觀察 snapshot 還有相關檔案
#yast2   snapper

2017-07-07 21-22-58 的螢幕擷圖.png

可以點選某個 snapshot 然後點選 Show Changes  來看系統變更的細節
2017-07-07 21-22-16 的螢幕擷圖.png

觀察 snapper snapshots
# snapper   list
Type   | # | Pre # | Date                     | User | Cleanup | Description           | Userdata     
-------+---+-------+--------------------------+------+---------+-----------------------+--------------
single | 0 |       |                          | root |         | current               |              
single | 1 |       | Mon Jun 19 15:14:01 2017 | root |         | first root filesystem |              
pre    | 2 |       | Thu Jul  6 15:18:12 2017 | root | number  | yast sw_single        |              
post   | 3 | 2     | Thu Jul  6 15:19:01 2017 | root | number  |                       |              
pre    | 4 |       | Thu Jul  6 22:06:33 2017 | root | number  | zypp(zypper)          | important=no
post   | 5 | 4     | Thu Jul  6 22:06:34 2017 | root | number  |                       | important=no
pre    | 6 |       | Thu Jul  6 22:53:21 2017 | root | number  | zypp(zypper)          | important=no
post   | 7 | 6     | Thu Jul  6 22:53:25 2017 | root | number  |                       | important=no
pre    | 8 |       | Fri Jul  7 14:07:45 2017 | root | number  | zypp(packagekitd)     | important=yes
post   | 9 | 8     | Fri Jul  7 14:11:18 2017 | root | number  |                       | important=yes

可以依照上面的 snapper 編號, 下指令刪除 snapper snapshots
# snapper  delete  5-7
  • 也可以單獨刪除某一個 snapshot, 這邊的例子是 5 到 7 所有的 snapshot

觀察資訊
# snapper   list
Type   | # | Pre # | Date                     | User | Cleanup | Description           | Userdata     
-------+---+-------+--------------------------+------+---------+-----------------------+--------------
single | 0 |       |                          | root |         | current               |              
single | 1 |       | Mon Jun 19 15:14:01 2017 | root |         | first root filesystem |              
pre    | 2 |       | Thu Jul  6 15:18:12 2017 | root | number  | yast sw_single        |              
post   | 3 | 2     | Thu Jul  6 15:19:01 2017 | root | number  |                       |              
pre    | 4 |       | Thu Jul  6 22:06:33 2017 | root | number  | zypp(zypper)          | important=no
pre    | 8 |       | Fri Jul  7 14:07:45 2017 | root | number  | zypp(packagekitd)     | important=yes
post   | 9 | 8     | Fri Jul  7 14:11:18 2017 | root | number  |                       | important=yes




目前調整方式
第1階段 - 調整 /etc/snapper/configs/root
BACKGROUND_COMPARISON="no"
EMPTY_PRE_POST_CLEANUP="no"

------------------------------------------------------------
第2階段會移除 snapper-zypp-plugin
第3階段會移除 grub2-snapper-plugin


Reference:

VMware workstation pro 12 無法連線 vCenter with openSUSE Leap42.2 小記

OS: openSUSE Leap 42.2
VMware workstation Pro 12

最近重灌工作 Desktop, 要使用 VMware workstation 連線 VMware vCenter ( Conect to Server ) 卻發現會造成程式閃退.

先說結論 目前只有 VMware workstation pro 12.5.2 才有辦法連線到 vCenter

已經嘗試的版本
  • VMware workstation Pro 12.5.3 / 12.5.7

如何移除 VMware workstation pro

#vmware-installer  -u   vmware-workstation

目前已經在論壇回報這個問題, 希望可以早日解決 ( 雖然目前用 12.5.2 也還好 …  )


Reference



星期四, 6月 29, 2017

Intel 750 SSD 1.2TB with VMware小記

Intel 750 SSD 1.2TB with VMware小記

這個是之前就已經安裝的 Intel SSD 750 SSD 小記

VMware OS:  VMware ESXi 6.5
Intel SSD 750 1.2TB

之前因為專案需要, 就進行 Intel 750 SSD 1.2TB 與 VMware ESXi 測試

感覺上, 目前這張卡還是被定義在消費機產品, 所以在 Intel 網頁上面, VMware 的 NVMe 驅動程式還停留在 1.5.0, 但是其他的 OS 最新版已經到 3.0.0 了
但是既然是要給 VM 使用, 當然是要在 VMware 上面裝, 感覺比較有效( 後來跟同事比對, 好像也是這樣 )

下載頁面

如果沒有安裝 NVMe 的話, 之前我的經驗是卡片不一定會認到, 然後效果不一定好.

安裝步驟( 可以參考下面的 Reference )
  • 下載完之後, 解開 .zip 檔案, 上傳到 datastore
  • 使用 esxcli  software  vib  install 指令安裝 vib 檔案
  • 將 VMware ESXi 重新開機

重開機完之後, 可以進 VMware ESXi 看相關資訊

[root@localhost:~] esxcfg-scsidevs   - a
vmhba0  vmw_ahci          link-n/a  sata.vmhba0                             (0000:00:11.4) Intel Corporation Wellsburg AHCI Controller
vmhba1  vmw_ahci          link-n/a  sata.vmhba1                             (0000:00:1f.2) Intel Corporation Wellsburg AHCI Controller
vmhba2  lsi_mr3           link-n/a  sas.578da6e715b20b20                    (0000:0d:00.0) Avago (LSI) MegaRAID SAS Invader Controller
vmhba3  intel-nvme        link-n/a  pscsi.vmhba3                            (0000:0e:00.0) Intel Corporation NVM-Express PCIe SSD
vmhba4  intel-nvme        link-n/a  pscsi.vmhba4                            (0000:81:00.0) Intel Corporation NVM-Express PCIe SSD
vmhba5  fnic              link-n/a  fc.1000a46c2aec7668:2000a46c2aec7668    (0000:0b:00.0) Cisco Systems Inc Cisco VIC FCoE HBA
vmhba6  fnic              link-n/a  fc.1000a46c2aec7669:2000a46c2aec7669    (0000:0c:00.0) Cisco Systems Inc Cisco VIC FCoE HBA

[root@localhost:~] vmkload_mod -s nvme | grep Version
Version: 1.2.0.32-2vmw.650.0.0.4564106

[root@localhost:~] vmkchdev -l | grep vmhba3
0000:0e:00.0 8086:0953 8086:370d vmkernel vmhba3

撿來的測試資訊
2017-06-29 21-38-31 的螢幕擷圖.png

Reference:


~ enjoy it

星期六, 6月 24, 2017

Python Basic Day 3 小記

Day 3

9:00 ~ 10:22

Notes
  • 自訂函數
    • 要先定義 function 才能執行 function
  • return 敘述
    • return 單獨使用,會中斷函數的執行
      • Python 對任何的回傳都有回傳值, 預設是 None
    • 可以用 tuple 回傳多個值

練習檔案

# coding=utf-8

# function 要執行之前要先定義, 如果先執行一個沒有定義的 function就會出錯
# 如果這個時候執行 ff() 就會出錯

def ff():
#註解要寫在function 裡面, 方便日後查詢
  '''Hello'''
  print('Hello')
# return 單獨使用,會中斷函數的執行,會回到
  return
# 所以這個 world 不會被列出
  print('world')

# 執行 ff()
ff()

# 這邊來觀察回傳值
r = ff()
print(r)

print('====================')
#查詢 ff 的用法
help(ff)

print('====================')

# 自訂 return 值
def dd():
  return 2+ 5

# 執行且列出
r=dd()
print(r)


輸出結果

Hello
Hello
None
====================
Help on function ff in module __main__:

ff()
   Hello

====================
7


  • yield 敘述
    • 可以回傳 generator 物件
    • 可以建立比較複雜的序列資料

練習檔案

# coding=utf-8
def ff():
# yield 可以回傳generator 物件
  yield 100
  yield 30
  yield 500
  yield 600
  yield 700

r = ff()
# 直接 print r
print(r)

# 這邊可以透過 next 按順序列出
# next() 返回迭代器的下一个项目
print(next(r))
print(next(r))
print(next(r))

# 透過 tuple方式來收多個回傳值, 使用 tuple好處是不會被更動
lst = tuple(r)

# 前面因為已經使用 3 個, 這邊就可以觀察是剩下的2個內容
print(lst)


輸出結果

<generator object ff at 0x101b82830>
100
30
500
(600, 700)

== Class break ==

10:40 ~ 12:00

  • 函數參數
    • 讓函數做更彈性的運用

練習檔案

# coding=utf-8
def ff(a):
  print('ff function', a)

# 這邊餵進去參數必須跟上面的數量一致
r = ff(10)
print(r)

print('===================')

def bb( a = 20):
  print('bb function:', a)

# 沒有指定就是使用預設值
r=bb()
print(r)

# 也可以覆寫
s = bb(30)
print(s)

print('===================')

def cc(a = 7, b = 40):
  print('cc function:', a, b)

# 參數的餵入依照位置的順序餵入
r = cc(8)
print(r)

# 使用 keyword 指定方式
s = cc( b=50)
print(s)

print('===================')


輸出結果

ff function 10
None
===================
bb function: 20
None
bb function: 30
None
===================
cc function: 8 40
None
cc function: 7 50
None
===================


  • 變數的有效範圍

練習檔案

# coding=utf-8

# 這個 x 是全域變數, 因為直接在 python 內定義
x = 100

def ff():
# x 是區域變數, 所以只在該函數有效
  x = 200
  print('ff function:', x)

ff()

# 這邊的 x 會列出 100
print(x)

print('======================')

# nonlocal 要找時間再想一下
def dd():
  x = 100
  print('dd function:', x)

  def gg():
      nonlocal x
      x = 200
      print('gg', x)

  gg()

  print('ppp', x)

dd()


輸出結果

ff function: 200
100
======================
dd function: 100
gg 200
ppp 200


  • 任意參數數量

練習檔案

# coding=utf-8
# 使用 * 來定義為 tuple
def ff(*a):
  print('ppp', a)

ff(3, 4, 5)

print('===========')

# 使用 ** 為 dict
def dd(**b):
  print('qqq', b)

dd()

x = { 'x':3, 'y':4, 'z':5}
print(x, type(x))

# 這邊要配合 dict 的方式
dd(**x)


輸出結果

ppp (3, 4, 5)
===========
qqq {}
{'z': 5, 'x': 3, 'y': 4} <class 'dict'>
qqq {'z': 5, 'x': 3, 'y': 4}


  • 引用內建外部函數
    • 使用 import 來匯入
      • Python 的 import 是去執行, 不像其他的語言是 copy and paste
    • 可以使用 as 來避免名稱衝突
  • Module
    • 每一個  .py的檔案就是一個 module
    • __name__ 會印出module的名稱


== Class break ==

13:00 ~ 14:00

  • Package
    • 為了區分及管理不同的 module可以將 module 放到 package
      • 資料夾對於 python, 稱之為 package

檔案在 testpackage/xx.py

# coding=utf-8
def ff():
  print('hello')

ff()

練習檔案

# coding=utf-8
# xx.py 放在 testpackage 資料夾下, 所以就是 import testpackage.xx
import testpackage.xx

# from testpackage import xx

# 執行的時候要寫出所有的路徑
testpackage.xx.ff()


輸出結果

hello
hello


== Class break ==

14:15 ~ 15:15

  • Decorator
    • 呼叫某個 function 之前先自動呼叫另一個方法
      • Memoization
      • security

練習檔案

# coding=utf-8
def fa(f):

  def helper():
      # fa 原本的內容
      print('fa')
      #這邊就會執行 fb
      f()

  return helper

# 使用 @fa 方式進行 decorator
# 以前的方式是 fb = fa(fb), 將fb自己傳入 fa
# 有需要先執行 fa, 就在前面加上 @fa 就會先執行
@fa
def fb():
  print('buiness')

# 希望執行 fb 之前先執行 fa
fb()


輸出結果

fa
buiness


== Class break ==
15:20 ~ 16:05

  • Decorator 解說以及自主練習

16:05 ~ 17:00
Chapter 6


  • 物件導向
    • 關鍵在物件關係的差異
      • 不同的目的, 會造成物件會有不同的關係
    • 使用人的邏輯來架構系統
  • 物件導向分析
    • Domain Object
      • 要完成某件目的所需要的元素