Linux Programmer

윈10 disk rescan, flush (sync) 기능 : 안전제거 본문

컴퓨터 관련/윈도 패밀리

윈10 disk rescan, flush (sync) 기능 : 안전제거

sunyzero 2021. 12. 11. 22:55

윈도우10에서 디스크 관련 작업을 하다보면 2가지 기능이 절실하게 필요한 경우가 있다. 첫째는 새로운 Pluggable disk라든지 혹은 외장 디스크를 붙였을때 디스크를 리스캔 하는 기능이다. 보통은 자동으로 인식되지만 간혹 자동 인식이 안되면 수동으로 인식 시켜야 한다. 둘째는 외장 디스크를 분리하기 전에 기록을 완전하기 하는 flushing disk 기능, 즉 sync 기능이다. (안전제거하지 않고 바로 뺄려면 꼭 이 방법을 사용하는 것을 권장한다.)

1. rescan 방법

윈도우에는 기본적으로 diskpart라는 디스크와 파티션 관련 작업을 할 수 있는 명령어가 있다. diskpart에는 여러 기능이 있는데 그 중에 rescan하는 기능도 있다. 사용 방법은 cmd(혹은 powershell, 터미널)에서 다음과 같이 명령한다.

Windows PowerShell
Copyright (C) Microsoft Corporation. All rights reserved.
새로운 크로스 플랫폼 PowerShell 사용 https://aka.ms/pscore6

PS C:\Users\SYKIM> diskpart
Microsoft DiskPart 버전 10.0.19041.964
Copyright (C) Microsoft Corporation.

DISKPART> rescan

DiskPart에서 구성을 검색하는 동안 잠시 기다려 주십시오...
DiskPart에서 구성 검색을 마쳤습니다.

DISKPART> exit

DiskPart 마치는 중...

diskpart 실행 후 rescan을 명령한 뒤에 exit로 빠져나오면 되는데, 문제는 이 방법이 매번 명령하기 귀찮다는 점이다. 따라서 스크립트 배치파일로 만들어두는게 편하다.[1]

1.1. rescan.bat 배치파일 만들기

C:\Windows 디렉토리에 rescan.bat 이름의 텍스트 파일을 만들고 아래의 내용을 넣는다.

diskpart /s c:\Windows\rescan.txt

위 배치 파일에서 사용할 c:\windows\rescan.txt 파일을 만들어야 하므로 C:\Windows 디렉토리에 rescan.txt 파일을 만들어 아래의 내용을 넣는다.

rescan

 

1.2. 실행방법

이제 cmd창 혹은 powershell이나 터미널에서 rescan이라고 명령하면 자동으로 rescan.bat 파일이 실행되므로 손쉽게 리스캔을 할 수 있다. 물론 관리자 권한을 필요로 하므로 관리자 권한의 창이 아니면 권한을 물을 수도 있다.

 

1.3. pnputil 명령어를 사용하는 방법

diskpart 대신에 pnputil을 사용하는 방법도 있다. 하지만 pnputil의 경우 간혹 몇몇 장치는 인식되지 않는 경우도 있으니, 되도록이면 diskpart로 rescan 하는 방법이 좋다. 그래도 일단 여기에 적어두도록 하겠다. (명령어는 관리자 권한으로 실행해야 한다)

 pnputil /scan-devices

 

2. sync 명령어

외장 디스크나 외장 메모리에 파일이 제대로 기록되었는지 확인하기 위해 리눅스에서는 sync 명령어를 사용한다. 이 기능이 윈도우에도 있었으면 좋겠다고 생각했는데, 마이크로소프트의 sysinternals에서 이미 만들어 두었다.

* sync 명령어 위치 https://docs.microsoft.com/en-us/sysinternals/downloads/sync

 

Sync - Windows Sysinternals

Flush cached data to disk.

docs.microsoft.com

위 파일을 다운로드 받고 안에 있는 sync64.exe를 C:\Windows에 복사해넣으면 된다.

참고로 sync도 관리자 권한을 필요로 한다.

 

2.1. sync64를 sync로 하드링크 생성

sync64를 타이핑 치기 귀찮기 때문에 줄임 표현으로 sync로 만들어두면 편하다. sync64.exe를 sync.exe로 이름을 변경하거나 복사해도 되긴 하지만 헷갈릴 수도 있으므로 하드링크(hard link)로 만들어두는 방법이 좋다. 하드링크는 오리지널 파일과 이름만 다른 별칭 파일을 만들기 때문에 용량을 더 사용하지는 않는다.

더보기

하드 링크(hard link)는 리눅스와 같은 POSIX 시스템에서 자주 사용하는 기능이라 리눅스, 유닉스, 맥 OS를 사용하는 사람들에게는 익숙한 물건이다. 하지만 윈도우에서도 이게 가능한지는 모르는 사람들이 많다. 본인도 얼마전에서야 알게되었다. 하드 링크, 심볼릭 링크(symbolic link 혹은 symlink)는 꽤 중요한 개념이므로 잘 모른다면 꼭 배워두자.

윈10에서 하드링크 생성은 fsutil 명령으로 작성한다.[2] 참고로 검색해보니 옛날에는 mklink 명령으로 가능했다고 하는데, 실제로 해보면 윈10에는 mklink라는 명령어는 없다. 아마로 fsutil로 통합된 것이 아닐까 생각한다.

사용법 : fsutil hardlink create <새 파일 이름> <기존 파일 이름>

관리자 권한의 cmd (혹은 powershell이나 터미널)를 열고 다음과 같이 명령한다. 아래는 파워셸에서 명령한 결과이다.

Windows PowerShell
Copyright (C) Microsoft Corporation. All rights reserved.
새로운 크로스 플랫폼 PowerShell 사용 https://aka.ms/pscore6

PS C:\Users\SYKIM> cd c:\windows

PS C:\windows> fsutil hardlink create sync.exe .\sync64.exe
하드 링크 작성: C:\windows\sync.exe <<===>> C:\windows\sync64.exe

PS C:\windows> fsutil hardlink list sync.exe
\Windows\sync64.exe
\Windows\sync.exe

먼저 cd c:\windows 로 디렉토리를 이동한 뒤에 "fsutil hardlink create sync.exe .\sync64.exe" 명령을 내린다. 이 명령은 sync64.exe를 기반으로 sync.exe 이름의 새로운 하드링크를 현재 디렉토리(C:\windows)에 생성한다. 이렇게 하면 sync64.exe와 sync.exe는 같은 하드 링크, 즉 동일한 파일이 된다. (복사되는 것이 아니다)

하드링크가 제대로 생성되었는지 "fsutil hardlink list <파일>"로 확인해 볼 수 있다. 위에 보면 sync.exe와 sync64.exe가 같은 파일(즉 하드 링크)임을 보여주고 있다. 하드링크가 없는 경우는 파일이 1개만 나타난다.

[1] diskpart 사용법, https://docs.microsoft.com/ko-kr/windows-server/administration/windows-commands/diskpart-scripts-and-examples

[2] fsutil 사용법, https://docs.microsoft.com/ko-kr/windows-server/administration/windows-commands/fsutil

 

반응형
Comments