Mar 22

尝试通过vCenter Converter将一台实体服务器虚拟化,却在最后的步骤一直出现”该对象已被删除或尚未完全创建”的错误信息,上网查了不少资料,感觉跟我的情况都不同,调日志也看不出什么端倪,经过更细致的反复测试后,总算找出了让我有点傻眼的原因。

继续浏览 »

Mar 16

  同事一台NB在更新Windows秋季更新時跳出一個無法解除安裝這些App — Trend Micro Internet Security 2009″的信息,上網搜尋結果要到下面的機碼去清理乾淨但接手這個問題時該機碼已無相關值需要清理後來總算在國外論壇找出完整的解法

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\UpgradeMigration

继续浏览 »

Mar 9

【vSphere HA】
vSphere HA 必须在 ESXi 主机发生故障损坏事件时,才会在 HA 集群中其他存活的 ESXi 主机,将存放在共享存储资源中的 VM 虚拟机重新启动。

如果底层的 ESXi 主机并未发生故障损坏事件,而是 vCenter Server 虚拟机内部运行的服务停止时,那麼vSphere HA高可用性機制是幫不上忙的。 (因此可以依靠Watchdog补足)

【Watchdog】(6.0以上才支持,默认情况下会自动启用)
vCenter Server 6.0新增了'Watchdog'监控机制,当运行的服务发生故障事件而停止运行,前2次发生时,Watchdog会尝试重新启动服务,如果第3次仍无法重新启动服务,将会重新启动VM虚拟主机。

【参考链接】

——
【VMware Data Recovery】
VMware Data Recovery(vDR)属于基于磁盘的备份方式,具有操作简单及易于部署的特性(因为它也是一台虚拟主机),支持Windows VSS(卷影复制)备份方式,也支持简单的重复数据删除功能(Data De-duplication)。

但是此备份工具有如下相关功能限制:

·备份环境中必须具备vCenter Server,才可使用此备份工具。
·属于基于磁盘,因此无法使用文件级或块级备份方式。
·每台vDR仅能备份100台虚拟机。
·无法在IPv6网络环境下运行。
·仅支持备份运行Windows操作系统(Windows 2000/XP/Vista/7、Windows Server 2003/2008)的虚拟机,不支持其他操作系统,如Linux、Solaris等虚拟机。

【参考链接】

——
【VMware Fault Tolerance】
如果企业无法接受VMware HA机制启动时虚拟主机有短暂的停机时间,那么VMware FT可能是一个解决方案,但是启用VMware FT有许多先决条件,例如该虚拟主机不能进行快照(Snapshot)、无法使用Storage vMotion功能、该虚拟主机只能使用一个vCPU等等条件限制。

VMware FT機制會於2台不同的Host上分別建立Primary和Secondary虛擬主機並且採用vLockstep技術以ESX/ESXi Host上的VMkernel Port來傳送Primary虛擬主機的資料至Secondary虛擬主機上但是Secondary不會有實際I/O的寫入行為

當Primary虛擬主機所處的ESX/ESXi Host故障損壞時則Secondary虛擬主機會馬上接手相關作業並且成為Primary虛擬主機此時會在另一台ESX/ESXi Host上再度建立一台新的Secondary虛擬主機來與Primary虛擬主機同步資料

【总结】
·vMotion/DRS此機制適合用於「計畫性」停機例如當ESX/ESXi Host實體伺服器發生記憶體硬碟故障或者需要停機進行韌體(Firmware)更新及歲修時這種排定好的計畫性工作可以使用此技術,将运行于虚拟化平台上的虚拟主机,迁移到其他台ESX/ESXi主机上,让企业可以在服务不中断的情况下维护实体主机。

·HA/FT:此机制适用于“非计划性”停机。当ESX/ESXi主机的实体服务器电力系统出现问题而未正常断电,或者實體主機的主機板損壞導致實體主機故障而這些非人為因素損壞之非計畫性故障狀況發生時透過此機制可以使虛擬主機自動遷移到其他台ESX/ESXi Host上繼續開機運作

但很重要的一點是這些機制都僅僅是保護ESX/ESXi Host Level層級而已而並非虛擬主機的作業系統層級(OS Level)以及作業系統上的應用程式層級(Application Level)

例如先前提到的VMware HA機制當ESX/ESXi Host故障損壞時等於運作於其上的虛擬主機也是被不當關機雖然虛擬主機可以在其他台Host上再度開機但很有可能虛擬主機的作業系統已經因為不當關機而造成作業系統損壞因此即使已經遷移到別台Host上也無法順利開機成功所以作業系統的備份作業有其必要性

而VMware FT機制是讓2台虛擬主機資料一模一樣進行運作因此若是Primary虛擬主機發生當機的狀況時例如Windows作業系統發生藍色當機畫面(Blue Screen Of DeathBSOD)此時將會因為vLockstep同步機制而使得Secondary虛擬主機也發生系統當機的狀況

至於應用程式層級的保護機制目前也有許多廠商研發相關機制例如Symantec以Veritas Cluster技術開發的Application HA便是可以保護虛擬主機上運作的應用程式如MSSQL、交换、OracleSAP等等

【参考链接】

—–
【VMware DRS】
自动根据物理主机的负载 , 自动调度虚拟系统的位置 , 也就是说当某台物理主机负载较高 , 可以通过 DRS 将部分子系统通过 VMotion 搬到负载较轻的物理主机。

二月 26

  前年買了一台HP ProLiant Server這是第一次自己在HP伺服器安裝系統(以往都是買IBM),第一次使用iLO時覺得比IBM的ServerGuide機制方便許多至少我不用上網去尋找ServerGuide的版本及下載燒錄等但有發現操作的過程似乎有點異常的慢由於是第一次使用iLO加上後續也正常裝進OS了便也沒再研究
继续浏览 »

二月 22
//MVC3開始,新增Razer語法,不同於先前的<%...%>括號語法,使用At Sgin(@)敘述程式碼片段。

//在Razer檢視中,使用@*...*@進行程式註解。

//在程式碼中,要輸出內容,要加@或@(...)
//在html標籤中,要輸出內容,要加@
//在程式碼中,要輸出純文字,要加@:
@if(true)
{
    String strPrint = "這是測試輸出文字";
    @strPrint<br/>
    <span>strPring</span><br />
    <span>@strPrint</span><br />
}

@{string strl = "測試";}
@(strl)輸出文字<br />

@{ string strHtml1 = "<ul><li>項目一</li></ul>";}
@Html.Raw(strHtml1)<br />

二月 13

  中午在幫公司一台x3650 M5安裝Windows Update並重開機後就再也喚醒不能一度懷疑是不是Updates的bug造成畢竟近期Updates的問題出現的有點頻繁把機殼打開後除了一顆LED 163亮error外看到SYS BRD ERROR這顆也亮了很想直接宣判死刑,请DBA同事尽快进行后续补救措施,不过同事外出吃饭,加上这台是公司主要的DB服务器,如果放弃这台,补救时间至少要两小时,而且早上建的数据都要重做,因此还是急切地寻找唤醒它的机会。

继续浏览 »

二月 5
//在測試Controller與View時,如果因為設中斷點導致網頁顯示不完整而無法進行測試,
//可以試著點選"跳離函式(Shift+F11)",讓頁面完整顯示,以進行測試。

//先於Model設計好欄位變數等,
//再於Controller設定執行時,透過剛設計的Model樣板,進行各個變數的處理(遞交資料)
//如從網頁欄位A讀取資料到變數X,再把X送到網頁的欄位B
//最後於View設計各欄位的顯示情形
二月 4
//Controllers\HomeController.cs
public ActionResult Index()
        {
            TempData["Message"] = "修改此範本即可開始著手進行您的ASP.NET MVC應用程式。";
            return View();
        }
<!--Views\Home\Index.cshtml-->
<h2>@TempData["Message"]</h2>
二月 3
    //資料模型一對多關聯
    public class Guestbook
    {
        public int Id { get; set; }
        public string Content { get; set; }
        public DateTime CreateTime { get; set; }
        public Member Member { get; set; }
    }

    public class Member
    {
        [Key]
        public string Username { get; set; }
        public string Password { get; set; }
        public string Name { get; set; }
        public string Email { get; set; }

        public ICollection<Guestbook> Guestbook { get; set; }
    }
    //Code First 就是在Model定義好各欄位後,其他的Controller、View都會自動幫你產生,
    //很神奇的功能,讓你專注在寫Model的部分就好
一月 31

    public class Index
    {
        [DisplayName("必選修")]
        //上面中括號這項非必要
        public string Required { get; set; }

        /*name只能有一個,所以這兩段先註解掉
        [Required(ErrorMessage = "學生姓名不得為空白")]
        public string Name { get; set; }

        [StringLength(10, ErrorMessage = "學生姓名不得超過10字元")]
        public string Name { get; set; }
        */

        [StringLength(10, ErrorMessage = "學生姓名必須介於2-10字元", MinimumLength = 2)]
        public string Name { get; set; }

        [Range(0, 100, ErrorMessage = "得分必須介於0~100之間")]
        public int Point { get; set; }

        [System.Web.Mvc.Compare("re_password", ErrorMessage = "兩次密碼輸入不一致")]
        //上面沒有using System.Web.Mvc的話,這邊就要打完整的命名空間
        public string Password { get; set; }
        public string Re_password { get; set; }

        [RegularExpression( @"^[0-9]{2,4}-?[0-9]{3,4}-?[0-9]{-4}$", ErrorMessage = "請輸入正確的電話號碼")]
        public string Phone { get; set; }

        [EmailAddress(ErrorMessage = "這不是E-mail格式")]
        public string Studentmail { get; set; }

        [Url(ErrorMessage = "這不是網址標準格式")]
        public string Url { get; set; }

        [FileExtensions(ErrorMessage = "所上傳的檔案不是圖片")]
        public string File { get; set; }

        [CreditCard(ErrorMessage = "這不是信用卡格式")]
        public string CreditCard { get; set; }

        [DataType(DataType.Date)]
        public string Date { get; set; }

        [Remote("RemoteTest", "Home", ErrorMessage = "Remote屬性測試")]
        public string For_Remote { get; set; }

        [MetadataType(typeof(ContentMetaData))]
        public partial class Content
        {
            private class ContentMetaData
            {
                [DisplayName("編號")]
                public int Id { get; set; }

                [DisplayName("姓名")]
                [Required(ErrorMessage = "請輸入性名")]
                [StringLength(10, ErrorMessage = "姓名不得超過10字元")]
                public string Name { get; set; }

                [DisplayName("內容")]
                [Required(ErrorMessage = "請輸入內容")]
                public string Content { get; set; }
            }
        }
    }