【備忘録】Windows PE上のdiskpartでNVMe SSDが表示されずブートローダの修復ができない場合の対処

 

 

・きっかけ

 プライムデーで買ったkioxia exeria g2 ssd-ck1.0n3g2という1TBのNVMeを手持ちのASUS TUF Dash F15というゲーミングノートに入れようとしたときにトラブった。

クローンディスクを作るところまでは良かったのだが、容量を512GB→1TBに拡張した関係かブートローダーがおかしくなり、BSoDで起動しなくなってしまった。

ここまではよくある話だと思う。問題は次で、ブートローダーを直そうと思い回復メディアを作成し起動する。diskpartを起動するとあるハズのヤツがいない...

そう、SSDがdiskpart上にいないのである。(UEFI上にはいる、セキュアブートのオンオフは試してある、list disk list volume共に認識なし)

そんなこんなでハマったので対処を...

 

 

・対症療法

ぶっちゃけ根本的には解決できていない。どうやらkioxiaのNVMe SSDとTigerlake(mobile)のプラットフォームに相性問題があるとかないとかで解決は難しいみたい

Question - NVMe SSD not appearing on Diskpart | Tom's Hardware Forum

 

そこでたまたまサブ機としてAMD環境があったため、そのマザーにブッ刺して、回復メディアを起動するとあっさりSSDを認識、bootrecじゃ治らなかったのでbcdboot D:¥Windows /l ja-jpをしてブートローダを生成することで解決した

OSが入ってるSSDが他にも入ってるとbootrecも打てないので注意が必要である

以上対症療法

 

環境:

    ASUS TUF DASH F15

    CPU:Core i5 11300h

    GPU:RTX3060

    SSD:KIOXIA EXERIA G2 SSD-CK1.0N3G2

 

    ブッ刺した方

    自作機

    CPU:Ryzen5 5500

    GPU:RX5700

    マザー:MSI MAG MORTAR B550

 

 

【自作erのタオバオ放浪記】MicroATX最小サイズのケースでつよつよPCを作る Part1

~旅の始まり~

先月、フラッと寄ったパソコン工房で見てしまった。ヤツを...

MSI RTX3070ti Ventus 3x

安かった。いやホントは安くないが、新しいグラボを渇望していた私にとっては些細なことであった...

 

というわけでRTX3070tiを衝動買いしてしまいました。ボーナス先借り、頑張れ来月の俺!

 

 

そんなわけで今あるRadeon RX5700が余ってしまいました(いつかの某仮想通貨の暴落時に拾ったヤツ、マイニング最盛期に売っとけとか言わない)

でも僕は手持ちの物は出来るだけ売りたくない主義の人なのでなんとか利活用しようと思いました

 

 

てわけで本題の小型PC作成と自戒を込めた備忘録を綴っていきます

 

構成編

 

差し当たって、余りグラボと余りストレージとトチ狂ってポチったメモリに組み合わせるので、そんなに予算がありません(泣)

 

しかし、つよつよpcを作りたいので妥協はしたくない...

 

あとついでに頻繫に移動するので持ち運びたい...

 

結果CPUは

 

 

AMD Ryzen™ 5 5500 | AMD  (L3キャッシュ削られてるのにとか情弱とか言わない)

 

に決まりました。ちなみに¥20500くらいでした。今¥19800で買えるやんけ...

いや、Alderlakeと悩んだけどワッパとかほらさ...

Zen3使いたいじゃん...?(実際はLGA1700板の高さにビビっただけ)

 

 

さて、こうなってくると半自動的にマザーボードが決まってきます

A520M-A PRO

最安値!!¥5980でした

 

あとは流用品とOSです(GAMVIO産Windows)

 

流用品は

PowerColor(ドライバ苦労玄人志向) Radeon RX5700

Sk Hynix KLEVV CARS M.2 SSD

KingFast 240GB SSD(いつかの王族)

Vulcan z 4000MHz

BTOについてたEnhanceの600W電源です

 

ここで一つの問題が生じます

小さくてMicroATXサイズのケースがない!!

微妙にデカいMicroATXのケースかMiniITXのケースしかありませんでした...

(そりゃそんな中途半端なもんないわな...小ささ求めるのかどっちなんだい...!)

 

いよいよ本題、タオバオ放浪記です

 

タオバオ放浪編~

皆様はタオバオを利用されたことがあるでしょうか?

僕はビビりなもので中華通販というとAliexpressかBanggoodくらいしか使ったことなかったです。

とはいえ国内をどれだけネットサーフィンしようと出てこないプロダクトが国内に転がってるわけもなく...

 

アリエクさまよってたら見つけました

 

www.aliexpress.com

 

FlexATXの横に魅せるためではなくスペースのためにグラボを立てるイか(れた)すケース!

しかもMicroATXがちゃんと載る...もうこれしかない!

そこで第一の関門にぶち当たります。アリエクにあるっちゃあるけど微妙に高い上に評価がほぼない!!

アリエクの星5一件とか怖くない??????

画像に写ってる金額に盛りすぎじゃない????

(表示:299元なのに¥7600)

と送料をガン無視した僕は考えました

 

タオバオに落ちてるんじゃないかと

 

そこで第二の関門にぶち当たります

 

タオバオの情報があるようで無い!

どこのサイトもやれ輸入ビジネスだの購入代理サイトへの誘導だので全然役に立たなかったです...(情弱)

 

断片的に散らばった情報を拾いながらなんとか登録しました。

ちなみに登録の流れはタオバオアプリで登録→電話番号認証まで済ませてからpcサイトのQRコードでログインするスタイルがオススメです(パスワード作ってないのにパスワード要求されて????ってなってたが、QRでログインできると気付いたというか書いてあった

あとはノリと勢いとGoogle画像翻訳でなんとかなります

この辺は気が向いたら現行版で詳しく書きます

 

続きはそのうち...

【備忘録】TkinterとPygameで簡素な音楽プレイヤーを作る

初めまして、Zaforiaと申します。

新社会人だったりします

独学&プログラミング歴数か月のガチ初心者です

 

諸事情で二ヶ月のネット断食を強いられて自分で作ったプログラムを忘れそうだったのでここに残していこうと思います。

 

ついでにはじめてgithubにも入れたので公開しておきます

 

Python 3.8環境です

3.8で追加されたformat構文 f'{var}' を使ってるのでこれ以下のバージョンだと動かない可能性があります

 

今日は書ききれなかったのでブログはぼちぼち更新していきます...

 

github.com

 

 

 

    1.使ったライブラリとか

タイトル通りPygameTkinterがメインです

選定理由はGUI入門でTkinterが作りやすそうだったのとPygameは再生と一時停止の関数があるから

 

pydubは再生時間の取得のために使いました

 

import os
import sys
import tkinter as tk
import tkinter.filedialog
from tkinter import Text
import itertools
import threading
import pickle
import glob
import pygame
from pydub import AudioSegment
import random
#__line__
import re
import tempfile
import shutil
#/__line__
import subprocess
from subprocess import PIPE

  

 

    2.再生時間の処理とか

結構苦戦しました。Tkinterのroot.afterの機能を使って125ms間隔で関数を無限に実行、別のスレッドで再生状態の監視をやってリセットしたりの処理をやってます。

 

class clock:
    def __init__(self, root):
        self.root = root

        self.time_start = 0
        self.min = 0
        self.flag = 0
        self.pause_flag = 0
        self.zeroflag = 0



    def time_counter(self):
        #self.a = threading.Thread(target=self.update)
        #self.a.start()
        if self.zeroflag == 0 and self.pause_flag == 0:
            self.time_start = 0
            self.zeroflag = 1


        if self.pause_flag == 0 and self.zeroflag == 1:
            self.msintimer += 1
            
        if self.pause_flag == 0 and self.zeroflag == 1 and self.msintimer >= 8:
            self.msintimer = 0
            self.time_start += 1
            
        if self.time_start >= 60 and self.pause_flag == 0:
            self.min += 1
            self.time_start = 0
            
        elif self.pause_flag == 1:
            self.stop()
            self.pause_flag = 0

        if pygame.mixer.get_busy:
            self.id = self.root.after(125, self.time_counter)

        self.update()

    def update(self):
        if self.flag == 1:
            sound =    AudioSegment.from_file(self.entries[self.boxes])
            rate = sound.frame_rate
            pygame.mixer.init(frequency = rate)
            z = pygame.mixer.Sound(self.entries[self.boxes])
            self.z = z.get_length()
            #if self.time_start + self.min * 60 > self.z + 1:
                 #if var.get() >= 1 :
                    #self.reset(self.mes, self.listbox, self.entries, self.boxes)
                 #else:
                      #self.root.after_cancel(self.id)
                #self.reset(self.mes, self.listbox, self.entries, self.boxes)
            self.mes.configure(text=f'{str(self.min).zfill(2)}:{str(self.time_start).zfill(2)}')


    def reset(self, mes, listbox, entries, boxes):
        self.zeroflag = 0
        self.time_start = 0
        self.min = 0
        self.msintimer = 0

        self.mes = mes
        self.listbox = listbox
        self.entries = entries
        self.boxes = boxes
        if self.flag == 0:
            self.flag = 1
        else:
            self.root.after_cancel(self.id)
        self.time_counter()


    def pause(self):
        self.nowmin = self.min
        self.nowtime = self.time_start
        self.nowmsintimer = self.msintimer
        self.root.after_cancel(self.id)
     

    def unpause(self):
        self.pause_flag = 1
        self.min = self.nowmin
        self.time_start = self.nowtime
        self.msintimer = self.nowmsintimer
        self.time_counter()

    def stop(self):
        self.root.after_cancel(self.id)