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

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

同事一台NB在更新Windows秋季更新時,跳出一個”無法解除安裝這些App — Trend Micro Internet Security 2009″的信息,上網搜尋結果,You need to go to the registry below to clean it up,But when taking over this issue,There were no relevant values in the registry that needed cleaning,Later, I finally found a complete solution on a foreign forum。
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\UpgradeMigration

【vSphere HA】
vSphere HA 必须在 ESXi 主机发生故障损坏事件时,才会在 HA 集群中其他存活的 ESXi 主机,将存放在共享存储资源中的 VM 虚拟机重新启动。
如果底层的 ESXi 主机并未发生故障损坏事件,而是 vCenter Server 虚拟机内部运行的服务停止时,So the vSphere HA high availability mechanism won't help。 (因此可以依靠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等等条件限制。
The VMware FT mechanism will create Primary and Secondary virtual machines on two different hosts respectively,並且採用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主机层级而已,而并非虚拟主机的操作系统层级(OS Level),以及操作系统上的应用程序层级(Application Level)。
例如先前提到的VMware HA机制,当ESX/ESXi主机故障损坏时,等于运行于其上的虚拟主机也是被不当关机,雖然虛擬主機可以在其他台Host上再度開機,但很有可能虛擬主機的作業系統已經因為不當關機而造成作業系統損壞,因此即使已經遷移到別台Host上,也無法順利開機成功,所以作業系統的備份作業有其必要性。
而VMware FT機制是讓2台虛擬主機資料一模一樣進行運作,因此若是Primary虛擬主機發生當機的狀況時,例如Windows作業系統發生藍色當機畫面(Blue Screen Of Death,BSOD),此時將會因為vLockstep同步機制,而使得Secondary虛擬主機也發生系統當機的狀況。
至於應用程式層級的保護機制,目前也有許多廠商研發相關機制,例如Symantec以Veritas Cluster技術開發的Application HA,便是可以保護虛擬主機上運作的應用程式,如MSSQL、交换、Oracle、SAP等等。
【参考链接】
—–
【VMware DRS】
自动根据物理主机的负载 , 自动调度虚拟系统的位置 , 也就是说当某台物理主机负载较高 , 可以通过 DRS 将部分子系统通过 VMotion 搬到负载较轻的物理主机。
前年買了一台HP ProLiant Server,這是第一次自己在HP伺服器安裝系統(以往都是買IBM),第一次使用iLO時,覺得比IBM的ServerGuide機制方便許多,至少我不用上網去尋找ServerGuide的版本及下載燒錄等,但有發現操作的過程似乎有點異常的慢,由於是第一次使用iLO,加上後續也正常裝進OS了,便也沒再研究。
继续浏览 »
//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 />

中午在幫公司一台x3650 M5安裝Windows Update並重開機後,就再也喚醒不能,一度懷疑是不是Updates的bug造成,畢竟近期Updates的問題出現的有點頻繁。把機殼打開後,除了一顆LED 163亮error外,看到SYS BRD ERROR這顆也亮了,很想直接宣判死刑,请DBA同事尽快进行后续补救措施,不过同事外出吃饭,加上这台是公司主要的DB服务器,如果放弃这台,补救时间至少要两小时,而且早上建的数据都要重做,因此还是急切地寻找唤醒它的机会。
//在測試Controller與View時,如果因為設中斷點導致網頁顯示不完整而無法進行測試, //可以試著點選"跳離函式(Shift+F11)",讓頁面完整顯示,以進行測試。 //先於Model設計好欄位變數等, //再於Controller設定執行時,透過剛設計的Model樣板,進行各個變數的處理(遞交資料) //如從網頁欄位A讀取資料到變數X,再把X送到網頁的欄位B //最後於View設計各欄位的顯示情形
//Controllers\HomeController.cs
public ActionResult Index()
{
TempData["Message"] = "修改此範本即可開始著手進行您的ASP.NET MVC應用程式。";
return View();
}
<!--Views\Home\Index.cshtml--> <h2>@TempData["Message"]</h2>
//資料模型一對多關聯
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的部分就好

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; }
}
}
}