liujia 发布的文章

用 Xidel 提取出目标网页的数据 然后通过 REST API 发布到 WordPress 站

需求:复制指定网页上某部分的文字,然后以文章的形式发布到wordpress站,采集。

尝试:xidel 这个软件很好地自动分析文件上标签,并导出数据。将导出的数据以参数递给 curl,通过 WordPress 的 REST API 发布文章。

如:

for i in $(seq -w 1000)
do
    caijiurl=https://liujia.anqun.org/index.php/archives/${i}/
    # curl $caijiurl | iconv -f gb2312 > out.html
    wget -O out.html $caijiurl
    title=$(xidel out.html -e "(css('h1'))")
    content=$(xidel out.html -e "(css('div.post-content'))")

    curl --user "admin:apppassword" -H "Accept: application/json" -H "Content-Type: application/json" -X POST -d '{"title":"'$title'","content":"'$content'","type":"post","status":"publish","categories":[25]}' https://wp.anqun.org/wp-json/wp/v2/posts
done

参考:

进青州野餐

之前,我跟吖后感慨说,冇一下就过了半生,工工做西嘅苦,时不时爱驷聊下来。听讲进青州一条路好长、好弯,不到驷拉下来。岩好吖江话佢全县各乡镇街都驷过,就得到青州街不曾,也爱驷。

吖后先在微信群打了计划:五一节前乃工好天就八点半到和中北门集合,各自带昼,下部三、四点归到。

大概实践记录如下:

打合水小路进青州。大概分两段:县城到合水,合水到青州(县道 X182 大湖 - 良排 全长35.51公里)。青州X182路段主要是绕着山肩边爬坡边转角,或边落埂边转角,限速30公里。路的一边系山岩(崖),另一边系奔岗,所以爱开慢滴、开小心滴。一路风景不错,天气忽晴忽雨,天空忽明忽暗。吖后开到二十公里左右,车稳,放着《笑看风云》等老粤歌。我打开车窗,一会儿用手托着暖黄、一流流的阳光;一会儿侧头让脸面迎着轻柔、一缕缕的微风;可忽地,迷糊中的我被雨滴打醒。呀……这多变的,山连着山,不知有多长,不知有多少个弯的路啊,我能再走一遍吗?

场景一:和中北门遇到初中教英语的曹老师

“曹老师!咪曹老师。尔吖记得到?”吖后突然对我讲,指着路另一边的一个行人。不等我回答,吖后就小步跑着,穿过路,要打招呼。
我跟上,“曹老师好”。我站定,打量着。曹老师的面神还系原嘅,皱纹深滴,头顶的头发疏滴。着装整齐,上身衬衫、下身西裤。
“好久不见啊。”曹老师知得吖后,接上话。
“系啊。里下疫情管到严,不准我进和中了。以前经常穿和中过城西,方便滴。”吖后不生疏嘅,话题接上驷后就一串串滴。
“尔里下做稳惹啊?”曹老师问吖后。
“我啊?最近想搞下直播,但不知喏般开到头,乃里搞得到嘅多粉来喔……”吖后答。我在一旁,咧开嘴角,咪咪笑着,不敢出声。
“尔驷乃里啊?”曹老师问。
“我等人(吖江),想驷乃里聊下来。”吖后答。
“好。那尔齐家聊。”
“曹老师驷乃里咪?”
“我驷学校啊。”
“系喔,还爱上课。”
睇稳曹老师走着过路的身影,其实我好想见面时调皮下,扑出一句,“Good morning, Mr. Cao”来打招呼的,但冇胆。

场景二:吃路边的野果(土话“飘”,学名“悬钩子”)

吖后停车,话风景不错,落车休息下。佢睇到路边有红红的、枣状的野果,摘到想食。
“哇。好靓,不知吖好食?”吖后好顺手将野果放进嘴。
“不好食。路边嘅花不好采,果更加不好食,每中毒!”吖江急喊,要阻止吖后食。
我蹲下来,低头近看野果。它艳红得滴水般,尾二指嘅大,周身有小小的、突起的珠子,珠子旁边有立起的小钩子。这系“飘”,我细佬哥时抢着摘来食。
“吖好食?”我问吖后。
“岩争进再,听到吖江喊就露出来了,不知惹味道。”吖后答。
我睇到另一只有点焉了的“飘”,有只蚁从中钻出来。“我不怕,我食。”我摘了只“飘”,放到利头上,含碎,好甜。
“啊……我等尔三分钟,如果冇西,我也食”。吖后忍不住再摘了“飘”。
我转头笑稳。吖后连三分钟也不等,即刻就食。
“啊……咳……”吖后捂着肚子、喊着。我们赶紧睇吖后。吖后笑稳。“冇西,冇西。好好食下。”吖后不再扮中毒,解释说。

场景三:搭背包的尴尬

因为担心背包留在车中被人碎车窗(电视里教育说不要留包在车内),所以我们搭着背包行青州街。但青州街人过少,且是熟人间的小环境,当我们三个背着包的人一出现,就被其他路人、店家投来好奇的目光,展览般,我们觉得好尴尬下。一只水果摊档的吖姨问吖后吖每“山榄”,十吊钱一包,系爱浸水后食嘅。路过帐篷档时,一只卖油豆腐嘅向我们打招呼,他用手指指了指木板上的油豆腐,意思系问我们吖不每油豆腐。我们摇头,我们不是从大城市来买特产的,且我们手上也没有锅来煮豆腐啊。

场景四:没水冲的公厕

吖江不想随意在山路边解手,就循着漂亮的路牌,找到了青州镇政府旁的一个公厕。公厕不大,里边有三个可以站着解手的便池。
“尔先,我等下”。吖江睇到地方不大,让我先解手。
我尿完,伸手扭管子上的开关,想冲水。
“冇水?”吖江问。
我行到洗手盆,又扭开关,想洗手。“也冇水。”我苦笑着回答。
我出来,找到吖后。吖后正在喝矿泉水。
“把滴水我洗下手”。我站定,手掌叠着,伸到吖后面前。
“啊?我说嘅水啊。”吖后舍不得。
“快滴。等下,我赔尔盒牛奶”。我无奈地催促。
“简样,做得。”吖后微微倾倒矿泉水瓶,倒水给我洗手。

场景五:在早餐店食昼

吖江提议在青州街消费,食滴东西来。我们转头,再逛一次青州街,在一间有两个门面的早餐店坐定。选了两份六吊钱嘅炒米粉,一份十吊钱嘅水饺。可能店家较忙,粉、饺迟迟不见。我们等的时候,不知吖后觉得饿还系无聊,他从包里拿出几只花生,用杯子装了一小勺店家放在桌头上的辣椒酱,先开吃了。米粉上来后,我饿得不停地夹着往嘴里送。吖后不急不忙,用箸满碟子翻找猪肉片,说要夹给我们吃。
“还不错啊。有好大碟下,猪肉也多,比城里嘅炒米粉还抵滴”。吖后边吃米粉边讲。
“嗯……嗯……”我点头,不讲话,食饱肚胈较重要。
食到一半时,我发现即使是盘底的米粉,也是稍微有点温度,不热的。
“好像米粉不咪现炒嘅。”我话。
“有可能系事先炒好,里下稍微蒸贝下就扛出来嘅。”吖江答。
“啊……蒸贝下喏般等了嘅久喔。”我有滴不理解。
食完后,我们坐着望店门口。这时,一只人麻利地搬东西进店,有一提卷纸,几袋青菜。
“不咪在京东买嘅?送菜来嘅咪?”我问吖江。
“应该系送货嘅”。
我们出店后继续向前行,睇到之前送货的车。“系美团嘅。”吖后探头望了望后尾箱。
“啊……简样话来,我齐家岩岩食嘅菜,不咪青州本地种嘅青菜,也系网上买到嘅大棚菜了?”我愕然。
“系喔。想不到,远吊吊从县城里走进青州来,系食一样嘅菜,不咪人家菜。怪不得食起来,冇惹特别,价钱也差不多。”吖后讲。

场景六:在路边草地野餐

在泥地的临时停车场附近,我们找到一个路口,有草坪的,在矮树下的地方,准备在这里食东西。吖后从车尾箱翻出一帆布,话系野营帐篷的遮阳布,可以垫在草地上坐、摆东西。我们摊开来,帆布系蓝橙两色,挺显眼的。我们拿出各自的东西来分着食。吖后带了自制的蛋糕,谦虚地说这次做得不成功,蛋糕不像蛋糕,面粄不像面粄,样子不好睇,但系真材实料。
“来,来。尝下,尝下。”吖后热情地撕了一小块给我。我接过来,它半透明状,捏起来比面包韧。
"吖咪放了牛奶?"吖江问。
“系,放了炼奶。尔食得出?”吖后答。
“尔齐家吖冇刀?我有只苹果,冇刀分不到把尔齐家啊。”吖后拿着个苹果四周找刀。
“冇啊。”我俩边食东西边模糊地答。
“我以前有一把‘瑞士军刀’,好好用嘅,但以前坐火车,把安检收走了。”吖后用两手手指抓稳住苹果两边,着力想扳开。但苹果纹丝不动。
“不到,我食一口,再把尔食一口,轮流食。吖得?”吖后将苹果伸到我面前。
“不来。”我坚持不同意。“如果尔系妹仔,就可以来。”我补上一句。

场景七:食饱后诉苦

“吖后,尔吖知,我喊尔出来行下,系里几工瞓不好。”我坐在吖后旁边,低头讲。
“惹?”
“昨晚日,股市大盘跌到捞粄跟。我失了好多钱。”
“啊?尔还炒股啊?”
“我不咪炒股,系买了理财。理财产品中包含了部分股票,所以大盘跌时,我嘅理财也会跌。”
“几多?失了几多?”吖后关心里问。
“我不曾起老婆,不使养细佬哥,存到嘅工资钱,都买了理财。”我细声地说。
“简样啊?简样系好可惜下哩。做惹驷买股票啊?”吖后问。
“不咪股票,系理财。我从来不买股票,觉得股票风险过高。我系买了中低风险嘅理财。但乃只会想得到,理财跌起来,心也会嘅痛嘅喔,还失本钱。”
吖后不出声。
“我开始想,我保守滴,买理财不系想餐几多钱,只系想抵减一下通货膨胀嘅速度。尔想,拿工工爱买嘅青菜来讲,从原来嘅2吊钱一斤涨到4吊钱。我一只人,在工资不涨嘅前提下,每只月,我单单青菜就爱出多60吊钱。我想稳,买只约4%收益率的理财产品,每工可以食多两两青菜。但乃只会想得到,4%收益的中低风险理财产品,会有损失5%~10%本金的风险喔。偏偏这失本嘅概率就还让我遇到了。原本我系想额外得到多一滴利息,但不料反过来成倍地失本钱。尔话,我喏般好?”
吖后还系不出声。
“尔睇。我白头发又多了嘅多。我想啊,我里下四十岁了,工作能力不断被社会压缩,我以后嘅收入只会越来越少。我想嘅好简单,想将我后生时存到嘅钱当作以后养老、应急的支出,因为我冇其它可依赖的:冇老婆服待,冇子女赡养,冇社保。我唯一有嘅系现金。但净现金对抗未来风险嘅能力实在系低。钱贬值过快,十年前,十万现金与现在十万的购买力,相差实在系好远。”
我继续细声地讲。
“我不懂理财。只会跟风买,从最初的‘余额宝’到现在的净值式基金理财产品。前几个月‘京东金融’和‘支付宝’APP弹窗发优惠券推荐买基金,我也买了。其实到里下,我都不知买过的理财产品,是有哪些区别。我只是简单用‘一万块钱每天能收到多少钱收益,是有一块钱,还是才几角钱’来判断抵不抵得买。”
“那……以后不买理财了。”吖后讲。
“我不知啊,冇得选择。存银行定期吧,三年仅有3%左右的收益,被通货膨胀率碾压;买中低风险的理财吧,比存定期高滴,但有损失10%本金的概率。最近网上还讲,河南有村镇银行的定期存款用户,连本金也取不出来了,更令人心慌。我转了一圈,发现钱虽然在自家手上,但总觉得至少有一部分是不属于自己的,这部分要么系原金额贬值,要么投资被亏损掉。以前话'节俭'系美德,但从里下来睇,撑钱不如使钱。但谁能保证自己一直有工作,一直有收入呢?人会老,人可能会生病嘅啊。我里下不存钱,以后急稳用钱,捞乃只拿?我不愿捞人家借钱。”我有点抽泣道。
“不使对未来嘅悲观,爱相信我们的‘国运’。”吖江也过来劝我。
“系啊。听讲,之所以选择‘十月一日’作国庆,系经过好多大师睇过嘅,国运至少会旺两百年。大盘会涨归驷嘅”。吖后接着说。
“系啊。与其唉声叹息,不如常滴捞吖后一齐出来聊,进下青州来。”我笑着站了起来。

场景七:车转弯时喊“我转角了”

返回途中,下坡的路段长,且转弯多。吖后说要“标准驾驶”,车每临到转弯的地方,摁一下喇叭,提醒可能从对向行驶过来的车辆注意。但这条路的每隔一小段就需要转一次弯,吖后摁喇叭的次数多且密。他就灵机一动,让坐在副驾驶座位上的我人工喊话,要我代替喇叭。我觉得好玩,就试着配合吖后,当车子开到转弯前时,我就用双手合拢了嘴,向车窗外大喊一声“转角了”。
“不够生动哩。爱加只‘涯’驷啊。”吖后咂着嘴评论道。
“我转角了!”我真得照吖后简样大声喊。吖后和吖江听了直乐。
我每隔两、三秒就要重复地大喊。不一会儿,我就觉得累了,建议吖后摁回喇叭去。
“不知对面车吖听不听得到。如果听到了,吖会话我齐家系‘颠仔’喔。好得,里下冇惹车。哈哈。”吖后笑着自问自答。

羊蹄甲花开的时候骑单车进火车站

下昼我还瞓稳觉,“爱星光”打电话来,喊骑单车,驷高铁站。我好久不曾骑单车,也有段时间不曾进火车站了,今日好天,也岩出驷运动下。还争开始,就在卫健局门口附近,路中间一排开稳花嘅树就吸引了我。抬头望过驷,红花不艳,红掺着白的花,一朵又一朵叠着,花叠成团。一团挨着一团的花,很显眼、很好看。我以为是樱花,走近一睇,不像,因为落在地脚下的花瓣较大。我停落来,抬头认真睇树上点缀般挂着的绿叶形状,还是认不出。等归到屋下,我将影到嘅花树图片放到网上自动识别,系——洋紫荆,就系羊蹄甲,怪不得那绿叶的形状似曾相识。

我以前也走火车站路,喏般一直不曾注意到佢呢?直到春天佢开到花,我争注意到。我边骑边睇羊蹄甲树,睇不厌般。有的路段种得疏些,我不高兴;密些路段开得花多,我又兴起来。骑着、骑着,突然冇了羊蹄甲树,我转头两头望,原来到火车站前了。我停车,迎肩抬膀,用衣袖擦流到眼角的汗。汗盐眼,有滴睁不开了。好得,过了火车站,前边到高铁站嘅路就一路溜落,单车基本都不使踩。在环城东路我觉得骑到好风,好舒服。不料站前大道还较风,吓到我爱时不时捏下刹车,减下速来。

到了高铁站和平北站,影了几张相。“爱星光”话睇吖冇其它路出,不打原路归,我话我不知路,佢带头我跟背。佢在手机上点了下地图,话有路,就在站前广场的左边。我不多信,慢腾腾跟上。一转角,一条笔直嘅乡道出现在我面前,路两边嘅屋、物,好像我知得。我睇了路边嘅路牌——均坑,啊哈……知得了,骑过、骑过,以前系从福和中学边的路口,有条埂进的。我翻了翻以前嘅骑行记录,系在2013年4月骑过。差不多十年过驷了,有嘅地系变了,如路边嘅篮球场加顶棚了、泥砖老屋老瓦换成树脂瓦了、村委做到较靓了……路不曾变,还系嘅大;路边嘅水塘也原样;路边嘅大树都还系嘅绿……

这次骑单车,从福和大道,经环城东路,到和平北站;返程系进均坑村,走乡道,过新塘村,打新社路口出。前半段,大路三车道;后半段,乡村单车道;大路视野阔,小路屋多景多,各有各的好。我总共花了大概一只钟头,当然其中我骑骑停停、停停拍拍的,使多了不少时间。

图1:路上开了花的羊蹄甲树,很好看
图2:
图3:前边骑着单车的是“爱星光”,在他左边是骑着“青桔”共享电动单车的后生仔
图4:“福和体育公园”公交站
图5:
图6:
图7:“和优路口”公交站,还在贴站牌内容
图8:“井头”公交站
图9:赣深高铁 和平北站
图10:“拱门”公交站
图11:02号线 拱门公交站 站牌内容
图12:经九路、站前大道、环城北路、纬二路、环城东路,路牌
图13:站前大道
图14:和平北站欢迎您
图15:
图16:
图17:站前,大喷水池吧
图18:“爱星光”的影像
图19:和平北公交总站,那有架转角嘅公交车
图20:有只老大人,箍条棍行路
图21:转到乡道
图22:
图23:深圳市福田区南园街道办事处对口帮扶捐建
图24:
图25:
图26:
图27:
图28:
图29:
图30:我在影这都树,料不到旁边屋有狗背,我放快上车骑住走
图31:晒腐竹
图32:新塘村党群服务中心
图33:
图34:
图35:屋前有口井
图36:屋旁菜园,墙头有只笔,好大只
图37:两只细佬哥前边走,大人被稳把锄头,都戴稳帽,好搭配
图38:
图39:
图40:
图41:
图42:
图43:
图44:新社路口
图45:“爱星光”帮我影嘅像

02号线 - 首班 7:00 末班 18:00 无人售票 票价二元
西郊车站
县人民医院
同辉名都
大坪油站
彭寨路口
大坪油站
高车水谢屋路口
城南小学
和平药厂
供电局
汽车总站
海天大厦
六角亭
东山岭
东山小区
龙湖公园
福和花园
聚英阁
县委党校
福和体育公园
和优路口
火车站
曹屋
井头
拱门
均上
和平北站
均上
拱门
井头
曹屋
火车站
和优路口
福和体育公园
县卫健局
龙湖学校
县融媒体中心
县人民法院
商业街
商贸城
碧桂园
县人民医院
西郊车站

链接:

用 Clover 在 bios 机子上模拟 uefi 安装 Windows 2022 系统

继上一篇:《grub2 + 虚拟磁盘 或 grub2 + ntboot 启动 bios + gpt 上的 Windows 2022》,因为网友反馈用方案A和B的Windows系统安装关键更新失败,这里实验方案D:用 clover 在 bios 机上模拟 uefi,让Windows以为这就是uefi启动的。

过程:

  1. 将分好区的虚拟磁盘 win2022.vhd 挂到 debian 11 的虚拟机里,准备安装 clover
  2. 如下载到当前最新版本 Clover-5145-X64.iso.7z,解压后 Clover-5145-X64.iso
  3. mount -o loop Clover-5145-X64.iso /mnt/iso # 挂载iso文件
  4. dd if=/dev/sdb2 of=/tmp/origPBR bs=512 count=1 conv=notrunc # 假如 win2022.vhd 上的 esp 分区为 /dev/sdb2
  5. cp /mnt/iso/usr/standalone/i386/boot1f32 /tmp/newPBR
  6. dd if=/tmp/origPBR of=/tmp/newPBR skip=3 seek=3 bs=1 count=87 conv=notrunc
  7. dd if=/tmp/newPBR of=/dev/sdb2 bs=512 count=1 conv=notrunc
  8. dd if=/mnt/iso/usr/standalone/i386/boot0ss of=/dev/sdb bs=440 count=1 conv=notrunc
  9. mount /dev/sdb2 /mnt/1 # 将 esp 分区挂载到 /mnt/1
  10. cp -r /mnt/iso/efi /mnt/1/ # 复制efi目录到esp分区
  11. cp /mnt/iso/usr/standalone/i386/x64/boot6 /mnt/1/boot
  12. 如果仅启动Windows,可编辑配置文件 /mnt/1/EFI/clover/config.plist ,内容如下:

    <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "https://www.apple.com/DTDs/PropertyList-1.0.dtd">
    <plist version="1.0">
    <dict>
     <key>Boot</key>
     <dict>
         <key>DefaultVolume</key>
         <string>EFI</string>
         <key>DefaultLoader</key>
         <string>\efi\Microsoft\Boot\bootmgfw.efi</string>
         <key>Fast</key>
         <true/>
     </dict>
     <key>GUI</key>
     <dict>
         <key>Custom</key>
         <dict>
             <key>Entries</key>
             <array>
                 <dict>
                     <key>Hidden</key>
                     <false/>
                     <key>Disabled</key>
                     <false/>
                     <key>Image</key>
                     <string>os_win</string>
                     <key>Volume</key>
                     <string>EFI</string>
                     <key>Path</key>
                     <string>\efi\Microsoft\Boot\bootmgfw.efi</string>
                     <key>Title</key>
                     <string>Windows 2022</string>
                     <key>Type</key>
                     <string>Windows</string>
                 </dict>
             </array>
         </dict>
     </dict>
    </dict>
    </plist>
  13. clover安装好后,释放Windows 2022,添加引导等操作和前边的方案A差不多
  14. 在VirtualBox里的bios虚拟机启动,可以正常安装Windows及进行更新。在系统信息中显示为UEFI类型

在一台线上超微atom C2750的机子上测试,失败,clover未能启动,报错:

X64 Exception type - 0000000000000000D !!!
RIP - 000000007D34F7C5, CS - 00000000000038, RFLAGS - 00000000010206
ExceptionData - 000000000000000

bios-gpt-5.png

bios-gpt-6.png

参考:

grub2 + 虚拟磁盘 或 grub2 + ntboot 启动 bios + gpt 上的 Windows 2022

感谢:wzy,wintoflash,minlearn

需求:主机商提供的产品存储超过2TB容量,且仅支持bios方式启动机子。Linux系统能在 bios + gpt 的环境中正常安装和运行,但 Windows 系统要求 bios + mbr 或 uefi + gpt 的组合,不支持 bios + gpt 的场景。

方案A:从网友 wzy 的博客来看,Windows的启动管理bootmgr.exe不认gpt分区,所以启动不了。解决方法是创建一个包含启动代码和文件的虚拟磁盘文件来启动Windows。缺点:无法Windows更新

方案B:从网友 minlearn 在无忧论坛里和 ntboot 作者 wintoflash 交流帖可知,通过 ntboot 是可以启动 bios + gpt 磁盘上已经安装的Windows系统(不支持Windows安装,会报“Windows安装程序 - 无法将 Window 配置为在此计算机的硬件上运行”的错误)。缺点:无法Windows更新

方案C:用grub4dos的ntloader来启动Windows。测试失败,用grub4dos的ntloader可以让gpt上的windows进入到桌面,但如计算机名、配置网卡静态IP地址等更改操作在重启系统后不生效。

这里记录一下实践的过程:

方案A:

  1. 创建一个vhd固定大小的虚拟磁盘,如 18 GB,名称为win2022.vhd
  2. 该vhd虚拟磁盘至少有三个分区,第一个是BIOS Partition,这个特别的分区是grub2必需的,可通过Linux系统里的cfdisk程序来创建。如下边的分区例子:

    Device                                Start                   End               Sectors               Size Type
    >>  /dev/sdb1                              2048                 32767                 30720                15M BIOS boot
    /dev/sdb2                             32768                647167                614400               300M EFI System
    /dev/sdb3                            647168                679935                 32768                16M Microsoft reserved
    /dev/sdb4                            679936              37746687              37066752              17.7G Microsoft basic data
  3. 创建第二个vhd固定大小的虚拟磁盘,本例的容量为64MB,名称为bootmgr.vhd。磁盘用MBR分区,创建一个主分区,且设置为活动分区
  4. 在Windows系统里附加两个vhd虚拟磁盘,假如本例中,第一个大的虚拟磁盘的NTFS分区盘符是M:,ESP分区盘符是L:;第二个虚拟磁盘的分区的分区盘符是B:
  5. 将已经安装好的Windows映像释放到NTFS分区中,如本例中的第4个分区M:,执行 bcdboot.exe M:\Windows /s L: /v /f uefi 将创建uefi相关的启动文件到 L: 分区 ;执行 bcdboot.exe M:\Windows /s B: /v /f bios 将创建bois相关的启动文件到 B: 分区;执行 bootsect /nt60 B: /mbr 将在B:上创建启动代码
  6. 分离第二个虚拟磁盘
  7. 将bootmgr.vhd的虚拟磁盘文件放到第一个vhd虚拟磁盘中的esp分区中L:
  8. 分离第一个虚拟磁盘
  9. 将win2022.vhd磁盘挂到一个debian系统的虚拟机里,挂载后,esp分区/dev/sdb2路径为/mnt/1,用grub-install将grub2安装到vhd磁盘。如例:grub-install --target=i386-pc /dev/sdb --boot-directory=/mnt/1;复制/usr/lib/syslinux/memdisk 文件 到esp分区/mnt/1
  10. 复制或创建一个grub的配置文件,放在grub目录里,配置文件需有bootmgr.vhd的启动项内容,如本例的部分内容:

     menuentry "bootmgr.vhd" {
    insmod part_msdos
    insmod part_gpt
    insmod fat
    insmod ntfs
    linux16 /memdisk raw
    initrd16 /bootmgr.vhd
    }

    11.正常的情况下,该包含有grub2,bootmgr.vhd和Windows的gpt vhd虚拟磁盘,能在VirtualBox的bios或efi虚拟机里启动

方案B:

  1. 下载ntboot的源码,通过grub-mkimage创建好grub2的core.img,再用grub-install安装到vhd磁盘。如例:grub-install --target=i386-pc /dev/sdb --boot-directory=/mnt/1 --directory=/home/liujia/grub/i386-pc/ 这例里,是将vhd磁盘挂到debian系统里安装grub2,/mnt/1路径是vhd的第2个分区,即esp分区 /home/liujia/grub/i386-pc/ 是ntboot源码的目录路径
  2. 将windows的安装光盘iso里的sources/boot.wim/1/Windows/Boot/PXE/bootmgr.exe文件提取出来,放到ESP分区中
  3. 复制或创建一个grub的配置文件,放在grub目录里,配置文件需有ntboot的启动项内容,如本例的部分内容:

    menuentry 'nbtoot' {
    insmod part_msdos
    insmod part_gpt
    insmod fat
    insmod ntfs
    set root='hd0,gpt2'
    ntboot --efi=/bootmgr.exe --win (hd0,gpt4);
    }
  4. 将已经安装好的Windows映像释放到NTFS分区中,如本例中的第4个分区,且Windows是从uefi环境中引导的(ESP中有Windows的相应目录和文件,如上边的步骤,执行 bcdboot.exe M:\Windows /s L: /v /f uefi
  5. 正常的情况下,该包含有grub2,ntboot和Windows的gpt vhd虚拟磁盘,能在VirtualBox的bios或efi虚拟机里启动

问题:因为Windows是已经安装的,所以如将这个win2022.vhd复制使用,Windows的SID、计算机名称等是一样的。微软建议用sysprep来生成新的SID,避免机子加域时遇到问题。

bios-gpt-2.png

参考: