Category: Backup Solution

  • ELK #08 Oracle Audit Trail

    ต่อจา ELK #07 – Logstash คราวนี้ มาใช้งานจริง โดยใช้ ELK เพื่อเก็บ Log ของ Oracle Audit Trail

    1. Oracle Audit Trail บน Database Server เก็บ Log ในรูปแบบ XML โดยแต่ละ Event จะมี tag <AuditRecord> … </AuditRecord> คุมอยู่ ที่แตกต่างจาก Log ทั่วไปคือ ในแต่ละ Event จะมีเครื่องหมาย CRLF (การขึ้นบรรทัดใหม่) เป็นระยะ ๆ
    2. ออกแบบให้ Logstash รับข้อมูล (Input Plugin) จาก TCP Port 5515 ซึ่งต้องใช้ Codec ในการรวบ Multiline ในแต่ละ Event เข้าด้วยกัน โดยหา pattern “<AuditRecord>” เป็นจุดเริ่มต้น ส่วนบรรทัดที่ไม่เจอ Pattern ดังกล่าวนั้นการตั้งค่า negate => “true” เป็นการบอกว่า “ให้ดำเนินการต่อไป” โดยจะเอาบรรทัดที่ตามมาจากนี้ ต่อท้าย ด้วยการตั้งค่า what=> “previous”
    3. ในส่วนของ Filter Plugin จะอ่านค่าจาก “message” และ ส่งสิ่งที่ถอดจาก XML ได้ ไปยัง “doc”
    4. ในส่วของ Output Plugin จะส่งออกไปยัง ElasticSearch ที่ TCP port 9200

    ดัง Configuration ต่อไปนี้

    input {
       syslog {
          port => 5515
          codec => multiline {
               pattern => "<AuditRecord>"
               negate  => "true"
               what    => "previous"
          }
       }
    }
    filter {
       xml {
          source => "message"
          target => "doc"
       }
    }
    output {
      elasticsearch {
         hosts => ["elk.server:9200"]
      }
    }

    จากนั้น ทาง Oracle Database Server ทำการเปิด Audit Trail แล้วเขียน Log ลงไฟล์ แล้วเขียน Cron เพื่อ Netcat ไฟล์ส่งมาให้ Lostash ที่เปิด Port TCP 5515 ไว้รอรับ

    ผลที่ได้คือ

    โดยวิธีนี้ จะเป็นการนำ Log ซึ่งจากเดิมเป็น Text Format นำมาเป็น NoSQL ได้ ซึ่งจะสามารถ Query ข้อมูลได้ง่ายยิ่งขึ้น

    หวังว่าจะเป็นประโยชน์ครับ

  • วิธีใช้ Google Sheets เป็นฐานข้อมูล เพื่อการเฝ้าระวังระบบ โดยการใช้งานผ่าน Google API Client Library for Python

    ต่อจาก

    1. วิธีการใช้ Google Sheets เป็นฐานข้อมูล
    2. การใช้งาน Google Drive API ด้วย Google Client Library for Python
    3. วิธีการ Upload ไฟล์ไปบน Google Drive File Stream ด้วย Google Client Library for Python

    คราวนี้ ใครมีข้อมูลที่เกิดขึ้นในเซิร์ฟเวอร์ภายในองค์กร แล้วต้องการส่งไปเขียนเก็บไว้ใน Google Sheets แบบต่อท้าย (Append)

    เช่น ในตัวอย่างนี้ วัดระยะเวลาการโอนย้ายข้อมูล เปรียบเทียบระหว่าง rsync เพื่อสำรองข้อมูลไปไว้ในเครื่องเซิร์ฟเวอร์สำรองที่ต่างวิทยาเขต กับ การนำไปเก็บไว้ใน Google Drive ตามวิธีการที่กล่าวไว้ใน วิธีการ Upload ไฟล์ไปบน Google Drive File Stream ด้วย Google Client Library for Python

    ผมได้เขียนโค๊ดเอาไว้ที่ https://github.com/nagarindkx/google.git
    สามารถโคลนไปใช้งานได้ (ช่วย Reference กันด้วยนะครับ)

    ขั้นตอนการใช้งานมีดังนี้

    1. ใช้คำสั่ง
      git clone https://github.com/nagarindkx/google.git
      cd google
    2. ติดตั้ง python, pip, google-api-python-client ตามที่เขียนไว้ใน การใช้งาน Google Drive API ด้วย Google Client Library for Python และสร้างโปรเจคใน Google Developer Console เปิดใช้งาน Google Sheets API, สร้าง Credentials > OAuth Client ID แล้ว download JSON มาไว้ในชื่อว่า client_secret.json
    3. รูปแบบคำสั่งคือ
      $ python append2gsheet.py --help
      
      usage: append2gsheet.py [-h] [--auth_host_name AUTH_HOST_NAME]
                                   [--noauth_local_webserver]
                                   [--auth_host_port [AUTH_HOST_PORT [AUTH_HOST_PORT ...]]]
                                   [--logging_level {DEBUG,INFO,WARNING,ERROR,CRITICAL}]
                                    --data DATA --sheetid SHEETID [--range RANGE]
                                   [--value-input-option VALUEINPUTOPTION]
      
      optional arguments:
       -h, --help show this help message and exit
       --auth_host_name AUTH_HOST_NAME
         Hostname when running a local web server.
       --noauth_local_webserver
         Do not run a local web server.
       --auth_host_port [AUTH_HOST_PORT [AUTH_HOST_PORT ...]]
         Port web server should listen on.
       --logging_level {DEBUG,INFO,WARNING,ERROR,CRITICAL}
         Set the logging level of detail.
       --data DATA CSV format
       --sheetid SHEETID Google Sheets ID
       --range RANGE Simply Sheet Name like 'Sheet1!A1'
       --value-input-option VALUEINPUTOPTION
         Optional: [RAW,USER_ENTERED]
    4. สิ่งที่ต้องมี คือ Google Sheets ที่สร้างไว้แล้ว ให้สังเกตที่ URL
      ตัวข้อความที่อยู่หลัง https://docs.google.com/spreadsheets/d/ จะเป็น “Sheet ID” ซึ่งจะใช้ในตัวแปร “sheetid” ในขั้นต่อไป
    5. ในแต่ละ Google Sheets จะประกอบด้วย หลาย Sheet ในที่นี้ จะเขียนลง Sheet ที่ชื่อว่า “Data” ซึ่งจะใช้ในตัวแปร “range” ในขั้นต่อไป
    6. ตัวอย่างการใช้งาน เมื่อระบบทำการสำรองข้อมูล จับเวลา ก็จะทำการส่งข้อมูลไปเก็บในลักษณะ CSV อย่างนี้ส่งไป เช่น
      20180129-12,37.0188,27.5338,943.7682,902.7372

      ซึ่งประกอบด้วย 5 ฟิลด์ คือ วันเวลาที่วัด และ ข้อมูล เป็นจำนวนวินาที อีก 4 ฟิลด์
      วิธีการส่งคำสั่งในการใช้งาน ครั้งแรก ต้องใส่  –noauth_local_webserver ด้วย

      python append2gsheet.py --data 20180129-12,37.0188,27.5338,943.7682,902.7372 --sheetid 1YV_W_k8VkJbYn1fG1XXXXXXXXXXXXF8y5YtQwRC0DAY --range 'Data!A1' --noauth_local_webserver
      

      จะได้ผลดังนี้

      ให้เอา URL ไปเปิดบนเว็บ Browser ที่สามารถยืนยันตัวตนกับ Google ได้ ผลดังนี้

      แล้วก็ให้การอนุมัติ

      ก็จะได้ Verification Code อย่างนี้

      เอาไปใส่

      สำเร็จ และ ผลที่ได้

    7. แต่จะเห็นว่า ข้อมูล ตัวเลขที่ใส่เข้ามา จะถูกแปลงเป็นข้อความ ซึ่ง สามารถแก้ไขได้ด้วยการใส่ –value-input-option USER_ENTERED
      python append2gsheet.py --data 20180129-12,37.0188,27.5338,943.7682,902.7372 --sheetid 1YV_W_k8VkJbYn1fG1XXXXXXXXXXXXF8y5YtQwRC0DAY --range 'Data!A1' --noauth_local_webserver --value-input-option USER_ENTERED

      ผลที่ได้คือ คือ บรรทัดล่าง จะได้ชนิดเป็น Numeric มาเลย

    8. เมื่อเก็บผลเรียบร้อยแล้ว สามารถดูเป็น Chart แบบ Realtime ได้

    เผื่อเป็นประโยชนครับ

  • วิธีการ Upload ไฟล์ไปบน Google Drive File Stream ด้วย Google Client Library for Python

    Google Drive File Stream จริงๆแล้วก็คือการเปิดให้ PC ทั้ง Windows และ Mac สามารถ Map Drive จาก Google Drive มาเป็น G:\ หรืออะไรทำนองนั้น แต่ปัจจุบัน (September 2017) บน Windows Server ซึ่งใช้ Secure Boot จะไม่สามารถติดตั้ง Client ได้ และ Ubuntu Server ก็ยังไม่มีตัวติดตั้ง ดังนั้น ในภาพของผู้ดูแลระบบ ไม่สามารถใช้ความสามารถนี้ได้ … โดยตรง

    ส่วนใน Windows Desktop ทั่วไปก็จะติดตั้งได้ แม้ว่า จากคำโฆษณา จะบอกว่าผู้ใช้สามารถใช้งานได้ แม้พื้นที่บน Local Drive ไม่เยอะ แต่เอาเข้าจริง ด้วยความสามารถที่จะใช้งาน Offline ได้บ้าง ทำให้ Client ต้อง Cache ไฟล์ที่ใช้งานด้วยเช่นกัน และหาก upload ไฟล์ขนาดใหญ่ จาก Local Drive ไปเก็บใน G:\ ข้างต้น ก็จะทำให้ต้องเสียพื้นที่ในขนาดเท่าๆกันไปด้วย เช่น ใน Local Drive มีไฟล์ที่จะ Backup ขึ้นไป ขนาด 1 GB บน C:\ เมื่อทำการ Copy ไปยัง G:\ ก็จะเสียพื้นที่อีก 1 GB ด้วยเช่นกัน

    ทางออกก็คือ ใช้ความสามารถของ Google Client Library ทำการ Upload ไฟล์ขึ้นไปโดยตรง เท่าที่ทดลองมา จะไม่ได้ Cache บน Local Drive ทำให้สามารถ Upload ไฟล์ขนาดใหญ่ได้ โดยไม่เสียพื้นที่เพิ่มแบบ Client ข้างต้น

    วิธีการใช้งาน Python เพื่อ Upload File ขึ้น Google Drive File Stream

    1. ผมเขียน Code เอาไว้ ชื่อ upload2gdrive.py ไว้บน GitHub (https://github.com/nagarindkx/google) สามารถดึงมาใช้งานได้โดยใช้คำสั่ง
      clone https://github.com/nagarindkx/google.git
      cd google
    2. สร้าง Project, Credential ตาม “ขั้นที่ 1” ในบทความ การใช้งาน Google Drive API ด้วย Google Client Library for Python ซึ่งจะได้ไฟล์ Client Secret File มา ให้แก้ไขชื่อเป็น “client_secret.json” แล้ว นำไปไว้ใน directory “google” ตามข้อ 1
    3. วิธีใช้คำสั่ง
      ดูวิธีใช้

      python upload2gdrive.py --help

      Upload ไฟล์ จาก /backup/bigfile.tar,gz

      python upload2gdrive.py --file /backup/bigfile.tar.gz

      บน Windows ก็สามารถใช้งานได้ ด้วยคำสั่ง

      python upload2gdrive.py --file D:\backup\bigfile.tar.gz

      หากต้องการระบุตำแหน่ง Folder บน Google Drive ที่ต้องการเอาไฟล์ไปไว้ ให้ระบุ Folder ID

      python upload2gdrive.py --file /backup/bigfile.tar.gz ----gdrive-id xxxxxxxbdXVu7icyyyyyy

      หากต้องการระบุ Chunk Size (ปริมาณข้อมูลที่จะแบ่ง Upload เช่น ไฟล์ 1 GB หากกำหนด Chunk Size เป็น 100MB โปรแกรมจะแบ่งข้อมูลเป็น 10 ส่วน — ขนาดที่เล็กที่สุดคือ 1 MB และค่า Default คือ 100 MB)

      python upload2gdrive.py --file /backup/bigfile.tar.gz ----gdrive-id xxxxxxxbdXVu7icyyyyyy --chunk-size 100
    4. ผลการทำงานจะประมาณนี้

      ใน Google Drive ที่กำหนด ก็จะมีไฟล์ปรากฏอยู่

    หวังว่าจะเป็นประโยชน์ครับ

    PS: ในบทความต่อไป จะมาอธิบายว่า เขียนขึ้นมาได้อย่างไร โปรดติดตามชม

  • การใช้งาน Google Drive API ด้วย Google Client Library for Python

    ในบทความนี้ จะแนะนำวิธีการเขียน Python เพื่อติดต่อกับ Google Drive API ทาง Google Client Library ซึ่ง จะใช้ REST v2 [1] เนื่องจาก ใน REST v3 ยังหาทางแสดง Progress ไม่ได้ (หากได้แล้วจะมา Update นะ)

    สิ่งต้องมี

    1. Python 2.6 ขึ้นไป
    2. PIP Package Management Tool
    3. เครื่องต้องต่อ Internet ได้
    4. แน่นอน มี Google Account

    ขั้นที่ 1: เปิดใช้ Drive API

    เปิด URL https://console.cloud.google.com แล้วคลิก Select a project

    จากนั้นคลิกปุ่ม + เพือสร้าง Project

    ตั้งชื่อ Project แล้วคลิก Save

    เลือก Project ที่สร้างขึ้น เลือก API Library ที่ต้องการ ในที่นี้คือ Google Drive API

    แล้วคลิก Enable

    จากนั้น Create Credentials

    เลือกชนิดเป็น OAuth Client ID แล้วกรอกข้อมูลดังนี้

    สร้าง Consent Screen

    เลือก Application Type เป็น Web Application, ระบุ Name (จะแสดงตอนขอ Permission) แล้วตั้งค่า URL ทั้ง 2 อันเป็น http://localhost:8080

     

    และ สุดท้าย คลิก Download

    ก็จะได้ไฟล์ JSON มา ส่งนี้จะเรียกว่า “Client Secret File”  ให้เก็บไฟล์ไว้ใน Directory เดียวกันกับที่ต้องการจะเขียน Python Code โดยสามารถแก้ไขเปลี่ยนชื่อ เช่น ตั้งเป็น client_secret.json

    ขั้นที่ 2: ติดตั้ง Google Client Library

    ติดตั้งด้วย pip ตามคำสั่งต่อไปนี้

    pip install --upgrade google-api-python-client

    ขั้นที่ 3: เขียน Code เพื่อติดต่อ Drive API

    จาก Python Quickstart [1] เป็นการเริ่มต้นที่ดีมาก เราสามารถนำ Code มาเป็นจุดเริ่มต้นได้ โดยตัวอย่างจะทำการติดต่อไปยัง Google Drive แล้ว List รายการของไฟล์ 10 อันดับแรกออกมา

    ตัวอย่างที่ Google ให้มา จะอ้างอิงไปยัง Credentials Path ไปยัง directory “.credentials” ใน “Home Directory” ของผู้ใช้ แต่ในตัวอย่างที่จะแสดงต่อไปนี้ ได้แก้ไขให้ “Client Secret File” อยู่ที่ directory เดียวกับ python file และเมื่อทำการ Authorization แล้วก็จะได้ “Credential File” มาเก็บไว้ที่เดียวกัน

    Code ต้นฉบับ สามารถดูได้จาก https://developers.google.com/drive/v2/web/quickstart/python ในที่นี้จะเปลี่ยนเฉพาะส่วนที่ต้องการข้างต้น และ เขียน Comment เพื่ออธิบายเพิ่มเติมเป็นภาษาไทย (ซึ่งไม่สามารถเขียนลงไปใน Python Code ได้) โดยตั้งชื่อไฟล์ว่า listfile.py

    from __future__ import print_function
    ...
    # การกำหนด SCOPES ต้องสอดคล้องกับบริการที่เราจะใช้งาน
    SCOPES = 'https://www.googleapis.com/auth/drive.metadata.readonly'
    
    # แก้ไข Client Secret File ให้สอดคล้องกับไฟล์ที่ได้จาก ขั้นตอนที่ 1
    CLIENT_SECRET_FILE = 'client_secret.json'
    # แก้ไข Application Name ตามต้องการ
    APPLICATION_NAME = 'Drive API Python Quickstart'
    
    ...
    def get_credentials():
    ...
     # ไม่ใช้
     # home_dir =os.path.expanduser('~')
     
     # เดิม อยู่ใน os.path.join(home_dir, '.credentials')
     # แก้ไขให้อยู่ที่ Current Working Directory เดียวกันเลย
     credential_dir = os.getcwd()
     ...
     # เดิม os.path.join(credential_dir,'drive-python-quickstart.json')
     # ตั้งชื่อ Credential ตามต้องการ 
     credential_path = os.path.join(credential_dir,'drive_credential.json')
    ...
    
    def main():
    ...
     credentials = get_credentials()
     http = credentials.authorize(httplib2.Http())
    
     # ตรงนี้สำคัญ จะต้องเลือกใช้ REST Version ที่ต้องการ
     # ในที่นี้ ใช้ REST v2
     service = discovery.build('drive', 'v2', http=http)
     
     # ส่วนของการเขียน Code
     # ตัวอย่างนี้ เรียกใช้ files().list()
     # โดยตั้งค่า maxResults เป็น 10 ก็คือ เรียกเฉพาะ 10 รายการแรก
     # อ้างอิงจาก https://developers.google.com/drive/v2/reference/files/list
     results = service.files().list(maxResults=10).execute()
    
     # จาก อ้างอิง จะเห็นได้ว่า files().list() นั้น Return หรือ Response
     # items[] ซึ่งมี element เป็น รายการของไฟล์
     items = results.get('items', [])
     
     # ตรวจสอบว่ามีไฟล์หรือไม่
     if not items:
       print('No files found.')
     else:
       # หากมีไฟล์อยู่
       print('Files:')
       # loop เพื่อแสดงไฟล์ที่มีอยู่ ในที่นี้ จะไม่เกิน maxResults ข้างต้น
       for item in items:
         # แสดงฟิลด์ title และ id
         # เพิ่มเติม .encode('utf-8') ด้วย
         print('{0} ({1})'.format(item['title'].encode('utf-8'), item['id']))
    
    if __name__ == '__main__':
     main()

    ขั้นที่ 4: Run

    ตอนนี้ใน Directory จะมีไฟล์

    • client_secrets.json
    • listfile.py

    ใช้คำสั่ง

    python listfile.py

    หากเป็นการ Run ครั้งแรก ซึ่งจะยังไม่มีไฟล์ drive_credential.json โปรแกรมก็จะทำตาม “flow” โดย ถ้า run command line บนเครื่องที่มี X Window ก็จะเปิด Web Page ไปยัง Google เพื่อ Authorization

    และเปิด Web นี้ ให้คลิกเลือก Account ที่จะติดต่อด้วย

    หน้า Consent Screen คืออย่างนี้ คลิกอนุญาต

    ผลที่ได้

    Reference:

    [1] https://developers.google.com/drive/v2/web/quickstart/python

     

  • Juju #04 – วิธีทำให้ WordPress กระจายงานไปยัง MySQL Slave ด้วย HyperDB

    ต่อจาก Juju #03 – วิธีสร้าง Load Balance MySQL เมื่อมี MySQL Server มากกว่า 1 ตัว ซึ่งทำการ Replication กัน (ในตอนนี้ 2 ตัว คือ Master กับ Slave) ซึ่งให้ความสามารถในเรื่อง [1]

    • Data-Security : เมื่อข้อมูลถูก Replicate ไปที่ Slave แล้ว เราสามารถหยุดการทำงานของ Slave เพื่อทำการสำรองข้อมูลได้ โดยไม่กระทบประสิทธิภาพการทำงานของ Master
    • Analytics: ทำการวิเคราะห์ข้อมูลต่างๆได้ที่ Slave โดยไม่กระทบประสิทธิภาพการทำงานของ Master
    • Scale-Out Solutions: เมื่อมี Slaves หลายตัว ทำให้สามารถกระจายงานในด้าน Read เพื่อเพิ่มประสิทธิภาพ โดยการแก้ไขข้อมูล จะทำที่ Master เท่านั้น

    ในบทความนี้ จะกล่าวถึงวิธีการ Scale-Out Solutions ของ WordPress เท่านั้น โดยใช้ Plugin ชื่อ HyperDB

    HyperDB [2] เป็น Database Class ที่ใช้แทนที WordPress built-in database functions โดยจะทำให้ WordPress สามารถติดต่อกับ MySQL ได้หลายเครื่อง โดยที่สามารถกำหนดได้ว่าจะ Write ไปยัง Master และ Read จากทั้ง Master และ Slaves อีกทั้งยังสามารถ Failover ได้อีกด้วย

    วิธีการติดตั้ง HyperDB

    1. ที่ WordPress ใช้คำสั่ง
      wget https://downloads.wordpress.org/plugin/hyperdb.1.2.zip
      sudo apt-get install unzip
      sudo unzip hyperdb.1.2.zip
    2. ย้ายไฟล์ hyperdb/db-config.php ไปยังที่ Directory เดียวกันกับ wp-config.php (ในที่นี้คื่อ /var/www/)
      sudo cp hyperdb/db-config.php /var/www
    3. ย้ายไฟล์ hyperdb/db.php ไปยังที่ Directory wp-content (ในที่นี้คื่อ /var/www/wp-content)
      sudo cp hyperdb/db.php /var/www/wp-content/
    4. แก้ไขไฟล์ db-config.php (ในที่นี้คื่อ /var/www/db-config.php) [3] โดยค้นหาคำว่า DB_HOST ซึ่งควรจะปรากฏอยู่แค่ 2 แห่งในไฟล์ ให้ไปที่ชุดที่ 2 ซึ่งมีเนื้อหาประมาณนี้

      จากนั้นแก้ไข DB_HOST ให้เป็น DB_SLAVE_1
    5. ต่อไปก็ไปเพิ่ม define(‘DB_SLAVE_1′,’xxx.xxx.xxx.xxx’) ซึ่งไฟล์ wp-config.php หรือไม่ก็ wp-info.php (ในที่นี้อยู่ที่ /var/www/wp-info.php)
    6. เมื่อทดสอบใช้งาน พบว่า มี Query มาทั้งที่ master และ slave
      ในภาวะว่าง

      ในภาวะมีงานเข้ามา
    7. ทดสอบเพิ่มบทความใหม่ ชื่อ “This is my first article” พบว่า ระบบสามารถเขียนไปยัง Master แล้วสามารถส่งต่อไปให้ Slave ได้
    8. ต่อไป เพิ่ม mysql-slave2 เข้าไปใน Juju และสร้าง Relation เป็น master -> Slave เช่นกัน

      แล้วทำการเพิ่ม DB_SLAVE_2 เข้าไปใน db-config.php และ wp-info.php

    9. ก็จะพบว่าข้อมูลได้ Replicate ไปหา Slave2 แล้ว
    10. และ เมื่อทำการ query ข้อมูลก็พบว่า มีการกระจายคำสั่ง Read ไปทั้ง 3 เครื่อง

    References

    [1] https://dev.mysql.com/doc/refman/5.7/en/replication.html

    [2] https://th.wordpress.org/plugins/hyperdb/

    [3] https://www.digitalocean.com/community/tutorials/how-to-optimize-wordpress-performance-with-mysql-replication-on-ubuntu-14-04

  • แบ็กอัพ Windows OS ขึ้นเป็น virtual machine ด้วย disk2vhd

    ต้องการสำรอง Windows XP เครื่อง PC เก่า แต่ยังใช้ได้ ซึ่งมีโปรแกรมที่จำเป็น เช่น โปรแกรมสำหรับพิมพ์ปกแผ่น CD/DVD เป็นต้น เผื่อฮาร์ดดิสก์เจ๊ง หรือ เครื่องมันไม่ทำงาน อาจมีสักวัน

    คิดว่าจะใช้วิธีไหนนี้ ก็ค้นหาดูใน google มีคนพูดถึง disk2vhd จึงลองทำตาม ได้ผลน่าพอใจ เมื่อนำไฟล์ .vhd ไปเปิดด้วย Oracle VM VirtualBox บน notebook ของผม ผมสามารถทำงานโปรแกรมบน XP นั้นได้เหมือนเดิม

    วิธีการทำคือ
    1. ที่เครื่องเดิม ลงโปรแกรม Disk2vhd.zip

    disk2vhd01

    2. เปิดโปรแกรม

    disk2vhd02e

    3. ตั้งค่า ตัวเลือกแค่ Use Volume Shadow Copy อย่างเดียว และเลือก Drive C: อย่างเดียว ขนาด 14.29 GB

    disk2vhd03e

    4. ตั้ง VHD File name: ที่ Drive อีกอันที่เป็นชนิด ntfs เช่น e:\RD536.vhd

    5. รอจนเสร็จ

    6. นำไฟล์ไปที่เครื่อง notebook ที่มีโปรแกรม Oracle VM VirtualBox

    7. สร้าง New VM เลือก Use an existing virtual hard disk file และ คลิก Create

    disk2vhd04

    8. ในตอนแรก มันเปิด Windows XP ไม่ได้ จึงค้นหา มีคำตอบว่า ให้ติ๊กเลือก Enable I/O APIC ในหน้า System Motherboard ด้วย

    disk2vhd05

    9. เปิดใช้งาน VM windowsxp

    disk2vhd06

    รูปนี้เป็นเครื่อง notebook ที่เปิด VM Windows XP จากไฟล์ RD536.vhd

    disk2vhd07

    10. เมื่อจะใช้เครื่องพิมพ์ ให้ต่อสาย USB ของเครื่องพิมพ์เข้ากับ notebook แล้วเลือกเมนู Device > เลือก USB > เลือกที่ต้องการ

    disk2vhd08

    อ้างอิง:
    Disk2vhd v2.01 By Mark Russinovich Published: January 21, 2014
    https://technet.microsoft.com/en-us/sysinternals/ee656415.aspx

    Backup current Windows OS as a virtual machine
    http://techathlon.com/backup-current-windows-os-virtual-machine/

    VHD with XP cannot boot. What should I do?
    https://forums.virtualbox.org/viewtopic.php?f=2&t=48688#p221106

  • How to use bitlocker?

    หลังจาก Truecrypt ไม่ปลอดภัย ? คนความลับเยอะจะใช้อะไรเข้ารหัส HDD กันดี ทางเลือกหนึ่งคือใช้ bitlocker ที่มาพร้อมกับ Windows 7/8/8.1/10 (รุ่น Professional, Enterprise, Education, Enterprise LTSB เท่านั้น) และ Windows Server 2008/2008R2/2012/2012R2/(2016?)

    • เพื่อความสะดวกจึงสร้าง Virtual Hard Disk ดังนี้
      • เปิด Disk Management (Start > RUN > diskmgmt.msc)
        rundiskmgmt.msc
      • จะได้ Disk Management
        diskmanagementconsole
      • คลิกที่เมนู Action เลือก Create VHD
        createvhd
      • จะได้หน้าต่าง Create and Attach Virtual Hard Disk
        createandattachvhd
      • เลือกที่เก็บ ขนาดและชนิดได้ตามชอบใจ VHD และ VHDX ต่างกันตามคำอธิบายนะครับ ดังนั้นตามตัวอย่างนี้จะได้ดังรูป
        createvhdx
      • เลือกเรียบร้อยกด OK จะได้ HDD ลูกใหม่เพิ่มขึ้นมาอยู่ในสถานะ Not Initialize เหมือนเราเอา HDD ลูกใหม่ที่เพิ่งซื้อ (สดๆ :p ) มาเสียบ
        newdiskattach
      • คลิกขวาที่ HDD ลูกใหม่นี้เลือก Initialize Disk
        initializedisk
      • เลือกชนิดพาทิชั่นที่ต้องการว่าจะเป็น MBR หรือ GPT อันนี้ปล่อยตามค่าที่ถูกเลือกไว้แต่แรกเลยก็ได้ อย่าลืมอ่าน Note: ด้านล่างด้วยนะครับ (จะเป็น MBR หรือ GPT ขึ้นอยู่กับว่าลง Windows มาในโหมดไหน UEFI หรือ BIOS)
        initializenewdisk
      • สร้าง Partition ใหม่ ตัวอย่างนี้เลือกเป็น GPT Partition Table จะเรียกเป็น Simple Volume คลิกขวาที่พื้นที่ Unallocated เลือก New Simple Volume…
        newsimplevolume
      • เลือกขนาด Partiton ให้เป็นพื้นที่ทั้งหมดไปเลย แล้วกด Next ไปเรื่อยๆ
        newsimplevolumewizard
      • จนถึงขั้นตอน Format สามารถเลือกได้ทุกชนิดไม่ว่าจะเป็น FAT32 หรือ NTFS ตามตัวอย่างนี้เลือก NTFS กด Next แล้ว Finish
        format
      • จะได้ HDD ลูกใหม่ที่มี Partition ชื่อ Bitlocker เพิ่มขึ้นมาแล้ว (H:)
        drivebitlocker
      • เปิดดูด้วย Windows Explorer จะเห็น Drive H เพิ่มขึ้นมาแล้ว เป็นอันเสร็จสำหรับการสร้าง Virtual Hard Disk
        windowsexplorer
    • คลิกขวาที่ Drive H เลือก Turn on Bitlocker
      turnonbitlocker
    • จะได้หน้าต่าง Bitlocker Drive Encryption (H:) (ชื่อ Drive อาจต่างไปจากนี้แล้วแต่เครื่องนะครับ)
      bitlockerdriveencryption
    • เลือก Use a password to unlock the drive แล้วตั้ง Password ตามต้องการ กด Next
      passwordcreate
    • จะได้หน้าสำหรับ Backup recovery key เลือกได้เลยว่าจะเก็บไว้ในรูปแบบไหน (ในตัวอย่างเลือก Save to a file ไว้ก่อนเนื่องจากไม่ได้เข้าวินโดวส์ด้วย Microsoft account) เลือกเสร็จแล้วกด Next
      backuprecoverykeyจะได้ TXT file ชื่อขึ้นต้นด้วย BitLocker Recovery Key*.txt ให้เก็บไว้ให้ดีเผื่อกรณีฉุกเฉิน (อ่านรายละเอียดเกี่ยวกับ recovery key ได้โดยคลิกที่ What is a recovery key?)
    • คลิก Start encrypting
      startencrypting
    • รอสักครู่เมื่อไปดูที่ Windows Explorer จะเป็นว่ามีรูปแม่กุญแจขึ้นที่ Drive H แล้ว
      bitlockersuceed
    • คลิกขวาที่ Drive H เลือก Eject
      eject
    • Drive H หายไปแล้ว
      nonh
    • ไปยังที่เก็บแฟ้มที่สร้างไว้ ในข้อ ๑ หัวข้อย่อย ๕ (E:\aa.vhdx)
      aa
    • คลิกขวาที่ aa.vhdx เลือก Mount
    • ดูที่ Windows Explorer จะเห็นว่า Drive H ถูกล็อคไว้อยู่
      lock
    • คลิกขวาที่ Drive H เลือก Unlock Drive… จะมีหน้าต่างปรากฏขึ้นให้ใส่พาสเวิร์ดที่ตั้งไว้
      unlock
      enterpasswordtounlock
    • Unlocked
      bitlockersuceed
    • สามารถใช้ได้เหมือน HDD ปกติ และ HDD ปกติสามารถเปิดใช้ Bitlocker ได้ด้วยวิธีการเดียวกัน โดยไม่ต้องสร้าง Virtual Hard Disk ก็ได้
    • Eject Drive H ทุกครั้งที่งานเสร็จ
    • จบ ขอให้สนุกครับ

    อ้างอิง
    http://truecrypt.sourceforge.net/
    http://www.neowin.net/news/truecrypt-audit-reveals-vulnerabilities-but-no-backdoors

  • วิธีกู้ไฟล์ที่ถูก Ransomware จับไปเรียกค่าไถ่

    Ransomware หรือ โปรแกรมเรียกค่าไถ่ไฟล์ต่างๆ โดยการเข้ารหัสไฟล์เหล่านั้น ทำให้ไม่สามารถเปิดใช้งานได้อีก นอกจากจะยอมเสียค่าไถ่ให้กับผู้ร้ายด้วยเงินสกุล Bitcoin โปรแกรมเหล่านี้จะมาจากการติดตั้ง หรือถูกหลอกให้ติดตั้ง ผ่านทางเว็บไซต์ “อโคจร” ต่างๆ Software เถื่อน ละเมิดลิขสิทธิ์ทั้งหลาย และที่มีบ่อยมากคือ มาจาก “จดหมายหลอกลวง (Phishing)” ซึ่งทำให้ติดเชื้อได้อย่างง่ายดาย

    ข้อมูลเพิ่มเติม

    https://www.thaicert.or.th/alerts/user/2015/al2015us001.html

    เมื่อติด หรือ โดนเรียกค่าไถ่ เรียกได้ว่า ยากมากหรือแทบเป็นไปไม่ได้ที่จะกู้คืนโดยการ Decrypt  หรือถอดรหัสกลับคืน

    มีวิธีการเดียวที่ทำได้เลยคือ “กู้คืนจากไฟล์สำรองไว้” บนระบบปฏิบัติการ Microsoft Windows เอง ก็สามารถทำได้ โดยผู้ใช้จะต้อง “ตั้งค่าการสำรองข้อมูล” ไว้ก่อน จึงจะสามารถกู้คืนได้ แต่หากเครื่องคอมพิวเตอร์เครื่องนั้นเสียหาย ก็จะไม่สามารถกู้คืนได้อีกเลย

    แต่ยังมีวิธีการ “สำรองและกู้คืน” ที่ง่าย ปลอดภัย และแม้ว่าเครื่องคอมพิวเตอร์จะเสียหายอย่างไร ก็จะสามารถ “กู้คืนข้อมูลได้” นั่นคือการใช้งาน Google Drive ในการสำรองข้อมูล โดยผู้ที่มี Google Account หรือ Gmail สามารถใช้งานได้ทันที โดยมีพื้นที่ให้ 15 GB (รวมกับการเก็บ email) ส่วนผู้ใช้ในมหาวิทยาลัยสงขลานคริทนร์ จะได้ใช้ Google Apps for Education ซึ่งมีพื้นที่ในการจัดเก็บ “Unlimited” หรือไม่มีขีดจำกัดเลยทีเดียว (เบื้องต้นจะเห็นพื้นที่จัดเก็บ 10 TB — 10,000 GB)

    Google Drive เป็นพื้นที่จัดเก็บข้อมูลบนก้อนเมฆ หรือ Cloud Storage ผู้ใช้ของ Google Account สามารถเข้าถึงได้ที่ https://drive.google.com เมื่อทำการลงชื่อเข้าใช้งาน (Sign In)  แล้วก็จะสามารถมองเห็นข้อมูลบนระบบ สามารถสร้าง Folder และ Upload ไฟล์ขึ้นไปเก็บได้ และสามารถเข้าถึงได้จากทั้ง เครื่องคอมพิวเตอร์ และ Smartphone ได้จากทุกแห่งทั่วโลก ดังภาพที่ 1 (โดยต้องมีระบบ Internet เข้าถึงนะ)

    01-googledrivepsu

     

    ภาพที่ 1: Google Drive บนระบบ Google Apps for Education ของมหาวิทยาลัยสงขลานครินทร์

    ในที่นี้ จะแสดงวิธีการ สร้างโฟล์เดอร์ชื่อว่า “เอกสารสำคัญ” ไว้บน Google Drive เพื่อใช้ในการสำรองไฟล์สำคัญไว้ ขั้นตอนคือ คลิกที่ New > Folder แล้วตั้งชื่อว่า “เอกสารสำคัญ” แล้วคลิกปุ่ม Create ดังภาพที่ 2

    02-newfolder เอกสารสำคัญ

    ภาพที่ 2: สร้างโฟล์เดอร์ชื่อว่า “เอกสารสำคัญ” ไว้บน Google Drive

    ส่วนการทำงานเพื่อ Backup ข้อมูลบนเครื่องคอมพิวเตอร์ไปเก็บไว้บนระบบ Google Drive อัตโนมัติ ทำได้โดยติดตั้งโปรแกรม “Google Drive” บนเครื่องคอมพิวเตอร์ แล้วตั้งค่าให้ Sync ข้อมูลกับโฟลเดอร์ “MyGoogleDrive” ใน My Documents ของเครื่องคอมพิวเตอร์ ดังวิธีการต่อไปนี้

    1. Google Drive สามารถดาว์นโหลดได้จาก https://www.google.com/drive/download/
    2. เมื่อติดตั้งเรียบร้อยแล้วให้ลงชื่อเข้าใช้ และคลิก Next ไปเรื่อยๆ ดังภาพที่ 303-installgoogledrive
      ภาพที่ 3: คลิก “ถัดไป” จนถึงหน้าจอสุดท้าย
    3. หน้าจอสุดท้าย คลิก “การตั้งค่าขั้นสูง” ดังภาพที่ 404-advance
      ภาพที่ 4: คลิก “การตั้งค่าขั้นสูง”
    4. คลิก “เปลี่ยน” แล้วสร้าง MyGoogleDrive ไว้ใน My Documents ดังภาพที่ 506-MyGoogleDrive
      ภาพที่ 5: สร้าง MyGoogleDrive ไว้ใน My Documents
    5. ต่อไป เลือก “เลือกเฉพาะโฟล์เดอร์เหล่านี้”  แล้ว เอาเฉพาะ “เอกสารสำคัญ” แล้วคลิก “เริ่มการซิงค์” ดังภาพที่ 607-syncspecificfolder
      ภาพที่ 5: เลือกเฉพาะ “เอกสารสำคัญ”
    6. สักครู่ระบบก็จะทำการ Sync เมื่อเสร็จสิ้น จะได้ผลดังภาพที่ 608-syncsuccess
      ภาพที่ 6: Sync “เอกสารสำคัญ” เสร็จแล้ว

    ให้นำเอกสารสำคัญต่างๆมาใส่ไว้ใน “เอกสารสำคัญนี้” ระบบก็จะทำการ Sync ขึ้นไปบน Google Drive แล้ว และ การแก้ไขเปลี่ยนแปลงไฟล์ในโฟล์เดอร์นี้ จะถูกสำรองเอาไว้

    ต่อไป มาดูกันว่า เมื่อมีการแก้ไขไฟล์เอกสารชื่อ “doc1.docx” ระบบ Google Drive จะสำรองข้อมูลเอาไว้ให้ตลอด และสามารถกู้คืนรุ่นของเอกสารได้ ดังภาพที่ 7

    12-sequence

     

    ภาพที่ 7: แสดงเวลากับการแก้ไขข้อความ

    สิ่งที่ Google Drive สำรองไว้ให้ สามารถดูได้จากการ คลิกขวาที่ไฟล์นั้นๆ แล้วเลือก “Manage Version” ดังภาพที่ 8

    13-manageversion

    ภาพที่ 8: การเลือก Manage Versions

    จากนั้น สามารถหากต้องการย้อนเวลา ไปเอาไฟล์นี้ ขณะที่ยังมีข้อความและรูปภาพ ก็คลิกที่เวลา 14:56 แล้วเลือก Download ออกมาทับไฟล์เดิม หรือ เก็บไว้ที่อื่นบนเครื่องคอมพิวเตอร์ก็ได้ ดังภาพที่ 9

    14-restore1456

    ภาพที่ 9: เลือก Version 2 ที่บันทึกเมื่อเวลา 14:56 แล้ว download ไฟล์ออกมา

    ผลที่ได้คือ ไฟล์เดิมที่มีข้อความและภาพ ที่บันทึกเมื่อเวลา 14:56 ดังภาพที่่ 10

    09-doc1.docx

     

    ภาพที่ 10: ไฟล์ที่ถูกแก้ไขไปแล้ว ก็สามารถกู้กลับมาได้

    ในกรณีที่ไฟล์นี้ ถูก “ลบ” ทิ้ง ไม่ว่าจะโดยตั้งใจ หรือ ถูก Ransomware ลบทิ้งแล้วเหลือไว้แต่ไฟล์ที่เปิดไม่ได้ก็ตาม ดังภาพที่ 11  ก็สามารถกู้กลับมาได้

    15-deletedfile

    ภาพที่ 11: ไฟล์ doc1.docx ถูกลบหายไปจาก “เอกสารสำคัญ” บนเครื่องคอมพิวเตอร์แล้ว

    การกู้ไฟล์ที่ถูกลบไปแล้ว ต้องทำจากบน Google Drive ผ่านทางเว็บเบราเซอร์ โดยเข้าไปใน “เอกสารสำคัญ” แล้วคลิกตัว i ด้านขวามือบน แล้วคลิกที่คำว่า Activity จะพบว่า มีการลบ หรือจริงๆแล้วคือการย้ายไฟล์ไปลง Bin นั่นเอง ดังภาพที่ 12

    16-detailactivity

    ภาพที่ 12: แสดงให้เห็นว่าไฟล์ที่ถูกลบ ไปเก็บอยู่ใน Bin ของ Google Drive

    การกู้ไฟล์นี้คืนมา ก็เพียงคลิกที่ชื่อไฟล์ doc1.docx แล้วคลิกรูปแว่นขยาย จากนั้นระบบจะนำไปสู่ Bin หลังจากนั้น ให้คลิกขวาที่ doc1.docx แล้วเลือก Restore ตามภาพที่ 13:

    17-restore

    ภาพที่ 13: วิธีการ Restore ไฟล์ doc1.docx

    ผลก็คือ ได้ไฟล์ที่ถูกลบทิ้งกลับคืนมา ดังภาพที่ 14

    18-restorecomplete

    ภาพที่ 14: การกู้ไฟล์เสร็จสมบูรณ์

    หวังว่าจะเป็นประโยชน์ครับ

     

     

     

     

  • วิธี Backup PSU Email ด้วย Thunderbird

    เนื่องจาก PSU Email ให้พื้นที่ปัจจุบัน 1GB ซึ่ง อาจจะไม่เพียงพอต่อความต้องการของผู้ใช้บางท่าน หรือ บางท่านต้องการสำรองข้อมูล Email เก็บไว้ในเครื่องคอมพิวเตอร์

     ซึ่งสามารถทำได้ โดยใช้งานผ่านโปรแกรม Mozilla Thunderbird เชื่อมต่อกับ PSU Email ด้วย IMAP อีกทั้ง สามารถส่ง Email ออกได้จากทั่วโลกผ่าน smtp2.psu.ac.th และ ตัวอย่างต่อไปนี้ จะสร้างพื้นที่จัดเก็บบนเครื่องคอมพิวเตอร์ ไว้ใน D:\MyBackup

    (รายละเอียดของ PSU Email สามารถอ่านได้ที่ http://www.cc.psu.ac.th/staffemail)

    มีวิธีการดังนี้

    1. Download Mozilla Thunderbird (รุ่นล่าสุด 24.3.0) จาก http://www.mozilla.org/en-US/thunderbird/

     

    คลิกที่ Thunderbird Free Download แล้ว Save File ลงเครื่อง

    2. Double Click ไฟล์ ที่ Download มา (Thunderbird Setup 24.3.0.exe)

    3. จากนั้น ใช้ Next Technology คือ Yes, Next, Next, Install และ Finish

    4. จากหน้านี้ คลิก Set as Default

     5. คลิก Skip this and use my existing email

    6. กรอกข้อมูล ให้ครบ แล้ว คลิก Continue แล้ว คลิก Manual Config

    7. กรอกข้อมูลตามนี้ แล้ว คลิก ปุ่ม Advanced Config

    8. คลิกที่ Local Folder, คลิก Browse แล้ว เลือก D:\MyBackup (แล้วแต่จะสร้าง Folder)

    9. หน้าต่างนี้ คลิก Restart

    10. ด้านขวามือ คลิกขวา ที่ Local Folders แล้ว คลิก New Folder ….

     

    11. ตั้งชื่อ PSUEmail แล้วคลิก Create Folder

     12. เมื่อต้องการ เก็บสำเนา (Copy) หรือ ย้าย (Move) จดหมายจาก INBOX ของ PSU Email มาเก็บไว้ใน Local Folders บนเครื่องคอมพิวเตอร์ของเท่าน ก็ให้ทำการเลือกจดหมายที่ต้องการ แล้ว คลิกขวา (Right Click) แล้ว เลือก Copy To หรือ Move To ไปยัง Local Folder > PSUEmail

    เท่านี้ ก็ สามารถ เก็บจดหมายที่ต้องการไว้ในเครื่องได้แล้ว และสามารถทำการ สำรอง D:\MyBackup เอาไว้ใน Handy Drive, DVD หรือ External Hard disk ได้

    13. เมื่อต้องการนำมาใช้งาน ก็เพียงแค่ Copy ลงไปในเครื่อง แล้ว ทำตามขั้นตอน ข้อ 8 และ 9 ก็จะสามารถใช้งาน Email ที่เก็บไว้ได้ ดังตัวอย่างนี้

    14. สำหรับ การใช้งาน ThunderBird ให้สามารถใช้ภาษาไทยได้อย่างถูกต้อง และเป็นสากล ต้องตั้งค่าให้ ภาษาไทยใช้ Character Encoding เป็น UTF-8 โดยคลิกที่ Menu > Options แล้ว คลิกที่ Display > Advanced แล้ว เปลี่ยน Font for เป็น Thai และ ตั้งค่า Outgoing mail, Incoming Mail เป็น UTF-8 ตามภาพ แล้วคลิก OK

    หวังว่าจะเป็นประโยชน์ครับ