리눅스와 NVMe SSD 펌웨어 업데이트, 그리고 고통받는 리눅서

원래 ‘고통받는 리눅서’ 시리즈를 정규로 쓸 생각은 없었지만, 요즘같이 그냥 깔면 돌아가는 “It Just Works” 세상에 리눅스를 메인 OS로 쓰고 있다는 건 셀프로 고통받길 좋아한다는 것 외엔 설명이 되질 않겠죠. 그래서 오늘도 흔한 리눅서가 고통받는 것 중 하나인 펌웨어 업데이트를 들고 왔습니다<

미노리는 KXG50ZNV512G 라는 SSD를 쓰고 있어요. 흔히 Toshiba XG5 라고 불리는 물건이죠. 하드디스크 계의 도시바는 ‘또, 시바!’ 라는 악명이 아주 높았지만1)뭐 그것도 케이스 바이 케이스 같지만요, 미노리는 도시바 하드 서버에 넣고 혹사시키면서 돌리고 있는데 멀쩡합니다< SSD는 과연 어떨까요?

Toshiba KXG50ZNV256G/KXG50ZNV512G/KXG50ZNV1T02 non-SED Solid State Drive Firmware Update

This package provides the firmware for Toshiba KXG50ZNV256G 256GB, KXG50ZNV512G 512GB and KXG50ZNV1T02 1TB non-SED M.2 2280, Revision AADA4104, and is supported on Latitude, OptiPlex, Vostro, Inspiron, Precision, Alienware and XPS models running the following Windows operating systems: Windows 7, Windows 8, Windows 8.1 and Windows 10 64-bit only.

Fixes & Enhancements

Fixes:
-Fixed issue encountered during drive refresh in corner condition
-Fixed SMART reporting to be in line with industry practice

Enhancement:
- Improvements to Data Recovery in corner condition

(AADA4105)
Fixes & Enhancements
Fixes:
- Fixed write performance issue encountered on specific workload.

Enhancement:
- Not Applicable

산 후 벌써 두번이나 업데이트가 나왔네요. 성능도 더 좋아진다고 하고, 이제서야 업계 표준에 맞게 SMART를 지킬 마음이 들었다니 그거 참 다행이네요, 그러면 이제 업데이트를 해야 하는데, 델은 역시나 리눅서들을 실망시키지 않죠.

Supported Operating Systems

Windows 7, 32-bit
Windows 7, 64-bit
Windows 8, 32-bit
Windows 8, 64-bit
Windows 8.1, 32-bit
Windows 8.1, 64-bit
Windows 10, 64-bit

언제나처럼 직접 까야 하는거죠.

만능 바이너리 해체기, 7z

리눅스에서 파일을 까는 방법은 여러가지가 있어요. file 명령어를 통해서 이게 대충 어떤 파일일지 추측하는 방법도 있고, binwalk 를 통해서, 그리고 binwalk -eM 을 통해서 줄줄히 내부에 있는 압축 데이터까지 전부 추출해보는 방법도 있죠. 하지만, 의외로 꽤 쓸만한 툴이 있어요. 그건 압축 프로그램인 7-zip 이죠.

$ 7z l Toshiba\ XG5_nonSED_\ KXG50ZNV256G_512G_1T02_C0PF8_ZPE.exe

7-Zip [64] 16.02 : Copyright (c) 1999-2016 Igor Pavlov : 2016-05-21
p7zip Version 16.02 (locale=ko_KR.UTF-8,Utf16=on,HugeFiles=on,64 bits,8 CPUs Intel(R) Core(TM) i7-8550U CPU @ 1.80GHz (806EA),ASM,AES-NI)

Scanning the drive for archives:
1 file, 3832016 bytes (3743 KiB)

Listing archive: Toshiba XG5_nonSED_ KXG50ZNV256G_512G_1T02_C0PF8_ZPE.exe

--
Path = Toshiba XG5_nonSED_ KXG50ZNV256G_512G_1T02_C0PF8_ZPE.exe
Type = PE
Physical Size = 3832016
CPU = x86
Characteristics = Executable 32-bit NoRelocs NoLineNums NoLocalSyms
Created = 2003-10-18 04:35:08
Headers Size = 4096
Checksum = 3861488
Image Size = 221184
Section Alignment = 4096
File Alignment = 4096
Code Size = 77824
Initialized Data Size = 139264
Uninitialized Data Size = 0
Linker Version = 6.0
OS Version = 4.0
Image Version = 0.0
Subsystem Version = 4.0
Subsystem = Windows GUI
Stack Reserve = 1048576
Stack Commit = 4096
Heap Reserve = 1048576
Heap Commit = 4096
Image Base = 4194304
Comment = FileVersion: 1.3.1.12
ProductVersion: 1.3.1.12
FileDescription: 
----
Path = [0]
Size = 3714320
Packed Size = 3714320
Virtual Size = 3714320
Offset = 110592
--
Path = [0]
Type = zip
Offset = -110592
Physical Size = 3824910
Tail Size = 2
Embedded Stub Size = 113608

   Date      Time    Attr         Size   Compressed  Name
------------------- ----- ------------ ------------  ------------------------
2018-05-11 11:18:34 ....A      3775488      3710121  AADA4105-64bit.exe
2018-05-14 17:10:36 ....A         2342          951  Readme.txt
------------------- ----- ------------ ------------  ------------------------
2018-05-14 17:10:36            3777830      3711072  2 files

$ 7z l AADA4105-64bit.exe

....

   Date      Time    Attr         Size   Compressed  Name
------------------- ----- ------------ ------------  ------------------------
2018-05-11 11:18:30 ....A          144               launch.vbs
2018-05-11 11:18:30 ....A        20112               TFMDriver32.sys
2018-05-11 11:18:30 ....A        23184               TFMDriver64.sys
2018-05-11 11:18:30 ....A        29240               TFMNativeApp32.exe
2018-05-11 11:18:30 ....A        32312               TFMNativeApp64.exe
2018-05-11 11:18:30 ....A      2199608               TFMWizardApp.exe
2018-05-11 11:18:30 ....A      2860600               TFMWizardApp64.exe
2018-05-09 14:33:50 ....A      1601536               AADA4105.sig
2018-02-23 15:49:46 ....A       128527               EULA.rtf
2018-02-19 17:54:56 ....A        29750               Logo.bmp
2018-05-11 11:05:30 ..HSA         5120               Thumbs.db
2018-05-11 11:18:30 ....A         4228               TFMUpdate-config.xml
------------------- ----- ------------ ------------  ------------------------
2018-05-11 11:18:30            6934361      3775488  12 files

$ cat TFMUpdate-config.xml

....

    <!--- - - - - KXG50ZNV512G NVMe TOSHIBA 512GB - - - - - -->
    <Drive Model="KXG50ZNV512G NVMe TOSHIBA 512GB">
        <Firmware Revision="AADA4101">
            <AvailableFirmware Revision="AADA4105" FileName="AADA4105.sig" />
        </Firmware>

....

이렇게 AADA4105.sig 파일이 펌웨어 본체라는 걸 알 수 있죠. 이제 펌웨어 본체를 알아냈으니 저걸 nvme에 올려야 하는데, 이것에 쓰는 아주 좋은 툴이 있죠. 바로 nvme-cli 에요.

심호흡을 한번 크게 하고, 떨리는 마음으로 펌웨어 업로드 명령을 내려봐요.

$ sudo nvme fw-download /dev/nvme0 --fw=AADA4105.sig
Firmware download success
>>> elapsed time 12s                                                            
$ sudo nvme fw-commit /dev/nvme0 --slot=0 --action=1
Success committing firmware action:1 slot:0

그리고 리부팅을 하고, 다시 부팅이 되는 걸 보면서 환호성을 지른 후

$ sudo nvme id-ctrl /dev/nvme0 | grep fr
fr      : AADA4105
frmw    : 0x14

안 망했네요<

어지간하면 윈도우로 멀티부팅해서 펌웨어 업데이트를 하는게 가장 좋겠지만, 윈도우를 쓰지 않는다면 이런 방법을 사용해 볼 순 있겠죠. 이 작업을 자기가 뭘 하고 있는지 파악을 못하면서 하면 SSD가 (진짜로) 벽돌 될 위험이 존재하니, 조심해서 진행하세요.

Sn   [ + ]

댓글 남기기

This site uses Akismet to reduce spam. Learn how your comment data is processed.