發表文章

The Disk2vhd Disaster — and How StarWind’s V2V Brought Redemption! --About Windows Server 2012 STD P2V

Our company has been operating a Windows Server 2012 STD host installed on a physical 2U rack server for years. As services on the machine are nearing decommission and hardware failure risks are increasing, we've decided to virtualize the system to streamline operations. Summary(Suggestion) Use StarWind’s V2V Converter / P2V Converter directly — it saves valuable time. If you have sufficient privileges, the converted system can be mounted directly to another Hyper-V host . If the server has multiple partitions , choose to clone the entire physical machine. Avoid converting individual disks separately to prevent unexpected complications. Background ChatGPT and Microsoft’s commonly recommended P2V conversion tool is Disk2vhd . It allows conversion without shutting down Windows. Most articles from ~10 years ago suggest this tool. I initially tried splitting the system: storing the recovery and C drive in one VHD, and the database D drive in another, to reduce file size. Sy...

Windows Server P2V 實體轉虛擬 防踩雷筆記 (Windows Server 2012, Hyper V)

公司有一部多年前建置的 Windows Server 2012 STD主機,是安裝在實體2U伺服器上。因為評估服務即將封存,硬體毀損的風險偏高,決定轉為虛擬化,比較方便營運。 先講結論: 第一,直接使用 StarWind的軟體  V2V Converter / P2V Converter  , 可以節省寶貴的時間。 轉換結果在權限足夠的前提下,直接掛載到另一部 HyperV 主機上。 第二,同一部主機上有多個磁區,選擇複製整部實體機器, 不要"個別分開"轉換虛擬磁碟, 以免節外生枝。 前情提要: ChatGpt 跟網路上微軟提供的P2V轉換工具大多是 Disk2vhd ( 連結 )。他可以在Windows不關機的前提下執行安裝並轉換。多數早期的文章(10年前)都指向用這個工具。我考慮虛擬磁碟會太大,因此將救援磁區跟C槽存一個VHD,有資料庫的D槽存另一個VHD。 症狀(現象): 系統很快就將Windows Server 2012轉換成VHD。掛載到HyperV上並建立HyperV的第一代虛擬機器,加入虛擬硬碟後。結果發生黑色螢幕下游標一直閃的問題。不能開機。 Lab1 : Disk2vhd 失敗 處理與Trouble Shooting 問了Copilot(微軟家的Chatgpt),他給我的答案是利用Windows Server的 ISO 開機,進入修復模式,然後利用 diskpart 等工具找到一個99MB左右的隱藏磁區,要手動格式化為Fat32格式,並利用他來重建開機磁區。結果,是經歷數小時、令人崩潰的反覆失敗。而且,在diskpart中使用list volume指令觀察,居然會看到好幾組重複的磁區;磁碟目錄找不到..... 嗯,這看起來很不對呀。 Disk2vhd畢竟是針對比較早期如XP、Win7、Server 2008等的舊系統,對於開機磁區的辨識不那麼聰明。Windows Server 2012已經使用 UEFI/GPT 型硬碟磁碟分割。心想再試下去決不是辦法,若之後上面執行的服務( SQL Server )讀取硬碟有問題就慘了。改弦易轍選用 Starwind V2V Converter / P2V Converter。 Lab12 : V2V Converter / P2V Converter  V2V Conve...

動態產生pdf檔案--從itextsharp到pdfsharp

手邊的某個專案原來使用itextsharp繪製表格。但因為 itextsharp新版本AGPL的要求,為免後續爭議,必須轉換改用其他解決方案,例如Pdfsharp。但在繪製表格時,itextsharp與pdfsharp有明顯的不同, iTextSharp 有 內建的 PdfPTable 類別,支援多樣化的表格操作,例如跨列、跨欄、邊框樣式、對齊、顏色、甚至可以在表格中插入圖片或其他元素。對於需要高度客製化的表格,iTextSharp 很強大。 PDFsharp則沒有 原生表格 API。你必須透過手動計算格線位置,使用 gfx.DrawRectangle 和 gfx.DrawString 等來「畫出」一張表格。代表需要更多低階的控制與程式碼。 當然,使用 PDFsharp 時,可以完全控制繪圖行為,包括只畫出每一列的「底線」。只要在畫表格的時候略過左右與上方的線段,只保留底部的那條線即可。 不過,有個壞消息是,PDFsharp 本身不具備內建解析 HTML 的功能,也就是說,單靠 PDFsharp 無法自動將含有 HTML tag 的文本轉換成對應格式的 PDF 內容。開發人員必須仰賴第三方的擴充套件,例如 HtmlRenderer.PdfSharp  ,以實現這類功能,將 HTML(包含 CSS 樣式)渲染成 PDF 的內容。基本上,它的做法是通過先將 HTML 渲染到一個圖形物件,再將該圖形物件繪製到 PDF 中,這樣就能夠模擬出 HTML 內容的顯示效果。 另外,PDFsharp 是一個基於繪圖 API 的低階工具,它不提供像文檔排版引擎那樣的自動「流式佈局」功能,也就是說,它不會自動維護目前文檔中已經繪製到哪個位置的座標。這需要你自己來管理目前的「游標位置」(例如目前的 X 與 Y 值)。當你處理動態生成 PDF 並需要換頁時,通常會建立一個頁面佈局管理器,用來計算每個元素的擺放位置以及是否需要新增頁面。基本的邏輯如下: 設定頁面邊界與有效區域 通常你會定義固定的頁面邊界(例如上、下、左、右邊距),有效區域就是頁面的實際可用繪製空間。 舉例來說,若頁面高度為 800,而上下邊距分別都是 50,有效高度就是 800 - 50 - 50 = 700。 追蹤當前游標(Coordinate Cursor) 你需要保存一個 currentY (以...

iPAS資安證照準備: 資安新知與術語整理

WAN Wide Area Network 廣域網路 LAN( 區域網路) 和 WAN 都是由節點和連結組成的電腦網路 LAN接電腦或可上網的設備 WAN 外界網絡 可由多個互連的 LAN 組成 透過公有網際網路(ISP、VPN)進行虛擬連線,單位機構的外部連結與交換 https://ithelp.ithome.com.tw/m/articles/10320320 Router 實際網路連線的那個唯一的洞洞,就是 WAN 孔,而分配網路給其他設備的就是 LAN 孔 ISO/IEC 27001:2022 轉版 管理系統與 ISO 結構的一致性 簡化標題 新增控制項目 ISO 27014 資訊安全治理 建立全組織資訊安全:確保資訊安全涵蓋整個組織,而非僅限於 IT 部門。 採用風險導向方法:根據風險評估來制定資訊安全決策。 設定投資決策方向:確保資訊安全投資符合組織的長期目標。 確保內外部要求一致性:遵循法規與組織內部政策。 培養安全良好的環境:促進員工對資訊安全的認知與參與。 審查營運成果績效:確保資訊安全措施能有效支持業務目標。 此外,ISO/IEC 27014 提出 五大治理流程,包括評估、指導、監視、溝通與保證,以確保資訊安全治理的有效性。這項標準對於高科技、金融、醫療等高風險產業尤為重要,幫助組織提升資安成熟度並降低風險。 ISO 27017 雲端服務之資安控制措施 延伸自 ISO/IEC 27002 標準中 37 個控制措施,還增加 7 個新的雲端控制措施,以下問題: • 負責雲端服務提供者和雲端服務客戶之間關係的人是誰• 當合同終止時,資產的移除/歸還• 客戶虛擬環境的保護和分離• 虛擬機器 (Virtual Machines) 配置• 與雲端環境相關的管理操作和程序• 雲端服務客戶監控雲端活動• 虛擬和雲端網路環境的對接 ISO/IEC 27018 雲端服務個人隱私資料 ISO/IEC 27035 資安事件管理 ISO 29100:2024 隱私框架 隱私框架:提供一個標準化的隱私管理架構,幫助組織在處理 PII 時遵循適當的隱私保護措施。 角色與責任:定義 PII 處理過程中的參與者及其職責,以確保隱私保護的有效性。 隱私保護原則:包括透明度、目的限制、數據最小化、保留限制、完整性與機密性等原則,以確保 PII 的安全性。 技術與管理控制:提供隱私保...

Redis 在 C#的應用

Redis適用的場合   1.代替主機的Session機制,利於擴展多部主機  2.簡單、不講求精準的計數,如人氣排行榜等;可以容忍部分lost  3.極端要求前端回應速度、使用者體驗好的場合 (轉址查詢) 4.有許多人查詢"共同"、高度相似的資料集,讀多於寫 (查選課...火車班表...公車路線) 5.有某些資料是會定期失效清除的(Token) ,例如實作登入失敗進行鎖定的機制 6.競爭性資源的鎖定機制,例如 搶票系統的交易鎖( SETNX )   Redis不適用的場合   1.只有後端管理者在使用的場合,沒有多人競爭、搶快的必要 2.全都講求即時計算,不能接受時間差  3.因為精準數問題,避免儲存金額或是貨幣數字 4.沒有足夠資源建置cluster機制,單點失效或快取miss造成的損失與遲滯問題反而更嚴重   Redis Key的設計與使用 1.利用namespace的方式來標示有意義的內容,如 usr:vip:faculty:sigfried  2.key 跟 value不要過長(key 小於1K)  3.思考每筆key的生命週期該存活多久,設定有效期限  4.針對人、事、物資料可以把資料抽象到一個雜湊表裡;不要把JSON 的key-value 組合拆開、一個個當字串值塞進redis 的value  5. keys 指令 會把效能拖垮, 用 keys xxxxx* 無法預估筆數;應該 用scan 取代,可以限制回傳筆數、分批執行,例如 redis-cli scan 0 match key99* count 1000  6.設計key 時避免使用特殊字元     Redis Key的設定與組態 1.記得設定密碼認證,並限定存取來源 2.將敏感、耗時語法rename,避免在production遭到誤用,例如:  rename-command keys mykeysys 3.C#應用不使用using資源語法,因為是單執行緒 4.利用docker環境安裝 5.擷取 redis 最大占用記憶體      config get maxmemory  6...

Could not load file or assembly 'System.Buffers' 無法載入檔案或組件....

最近遇到C# windows form 的老專案必須使用 smtpclient寄信,但因為MailServer限制使用starttls與587port寄信,使用原來net 的 smtpclient 不能支援此方法,所以必須改用Mailkit組件。 由於原來專案使用.net  Framework 4.5.x版本過舊,咬牙升級為 .net Framework 4.7.1。 Mailkit看似搞定,但在建置過程中卻會看到警訊,   Could not load file or assembly 'System.Buffers, Version=4.0.2.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51' or one of its dependencies. The located assembly 's manifest definition does not match the assembly reference. (Exception from HRESULT: 0x80131040) 此問題的發生原因是Mailkit需要較新版本的System.Buffers等組件dll,透過nuget更新版本後,專案仍然記載要去拿原來的dll。 解決方法如下 <1>重新註冊元件 透過系統VisualStudio選單底下的開發人員終端機介面(要使用系統管理員權限執行),進到專案packages目錄之下擺放特定組件的位置,重新註冊元件。 教學文內的目錄是 netstandard2.0,傳統.net framework要選.net framework的版本 cd d:/project_folder/packages/System.Buffers.4.5.1/lib/ netstandard2.0 / 然後執行 gacutil /i System.Buffers.dll 接著回到Visual Studio內的Nuget 套件管理員( package manager console),透過powershell重新安裝套件。 update-package -reinstall 用文字模式打開   csproj 檔案,確認引用組件的版本改為4.0.3.0 (Version=4....