Windows Azure의 Web Role과 Worker Role은 가상 PC 인스턴스를 동적으로 생성하고 부팅시키는 방식을 통하여 서비스가 구현됩니다. SDK에서 소개하는것처럼 부팅이 끝나면 배포된 Role Application의 Entrypoint Class를 통하여 서비스의 초기화 작업이 이루어지고 서비스의 시작이 완료됩니다.
그렇다면, Windows Azure VM의 파일 시스템이나 여러가지 설정을 좀 더 상세하게 파악하고 다룰 수 있다면 서비스를 좀 더 풍성하게 꾸밀 수 있지 않을까요? 그런 취지에서 Windows Azure VM의 파일 시스템 구조를 살펴보는 글을 오늘 올려봅니다.
Note: 이 글은 Windows Azure OS 1.1을 기준으로 작성된 것이며, Windows Azure 내의 가상 PC 규격은 예고 없이 변동될 수 있음을 미리 알립니다.
Windows Azure VM의 Disk Partitioning 상태는 3개입니다. C/D/E 드라이브로 구분이 되어있는 상태로 파악할 수 있으며, 각 드라이브마다 역할이 있습니다. C 드라이브의 경우 서비스 구동과 제어에 필요한 핵심 리소스들이 주로 배치되어있습니다.
펼쳐두기..
Volume in drive C has no label. Volume Serial Number is 3A83-E377
Volume in drive C has no label. Volume Serial Number is 3A83-E377
Directory of c:\
04/21/2010 05:34 PM 2,147,483,648 dumpfile.dmp 04/21/2010 05:34 PM 4,294,967,296 pagefile.sys 04/22/2010 02:06 AM <DIR> System Volume Information 2 File(s) 6,442,450,944 bytes 1 Dir(s) 235,043,717,120 bytes free
D 드라이브에는 Windows Azure OS의 실제 시스템이 포함되어있습니다. Windows Azure OS의 기동에 필요한 Windows Server 2008 R2 x64가 설치되어있는 파티션입니다.
펼쳐두기..
Volume in drive D is Windows Volume Serial Number is F674-3730
Directory of d:\
02/13/2010 12:02 AM <DIR> inetpub 10/12/2009 09:27 PM 9,663 installVHDDriver.cmd 02/12/2010 03:02 AM 2,295,664 NDP35SP1-KB976126-v2-x64.exe 03/17/2010 12:00 PM 4,908 OnlineTargetPrep.cmd 04/22/2010 09:59 AM <DIR> OSdiagnostics 04/21/2010 05:31 PM <DIR> Packages 01/19/2008 10:11 AM <DIR> PerfLogs 02/16/2010 06:12 AM <DIR> Program Files 02/16/2010 06:12 AM <DIR> Program Files (x86) 03/03/2010 08:54 AM <DIR> rdsources 10/12/2009 09:27 PM 11,057 RolePrep_completed.txt 02/16/2010 05:45 AM 7,130 StageMe.cmd 02/16/2010 05:45 AM 11 StageMe.Pass1 10/12/2009 09:27 PM 14,797 TargetPrep_completed.txt 04/22/2010 02:06 AM <DIR> Users 03/03/2010 08:54 AM <DIR> Windows 7 File(s) 2,343,230 bytes 9 Dir(s) 7,884,308,480 bytes free
상당히 익숙한 모습의 디렉터리 레이아웃이 보입니다. inetpub, PerfLogs, Program Files, Program Files (x86), Users, Windows 디렉터리는 보통의 64비트 Windows OS에서 볼 수 있는 디렉터리 레이아웃과 같습니다. 좀 더 깊이 살펴보기 위하여, %windir%\microsoft.net\framework 디렉터리 아래에 어떤 버전의 프레임워크들이 설치되어있는지도 살펴보겠습니다.
펼쳐두기..
Volume in drive D is Windows Volume Serial Number is F674-3730
Directory of D:\windows\microsoft.net\framework
02/16/2010 06:30 AM <DIR> . 02/16/2010 06:30 AM <DIR> .. 04/11/2009 04:12 PM 79,696 NETFXSBS10.exe 09/18/2006 09:32 PM 41,392 netfxsbs12.hkf 01/05/2008 11:25 AM 16,896 sbscmp10.dll 01/05/2008 11:25 AM 16,896 sbscmp20_mscorwks.dll 01/05/2008 11:25 AM 16,896 sbscmp20_perfcounter.dll 01/05/2008 11:25 AM 14,352 sbs_diasymreader.dll 01/05/2008 11:25 AM 14,336 sbs_iehost.dll 01/05/2008 11:25 AM 14,360 sbs_microsoft.jscript.dll 01/05/2008 11:25 AM 14,904 sbs_microsoft.vsa.vb.codedomprocessor.dll
01/05/2008 11:25 AM 14,344 sbs_mscordbi.dll 01/05/2008 11:25 AM 14,344 sbs_mscorrc.dll 01/05/2008 11:25 AM 14,344 sbs_mscorsec.dll 01/05/2008 11:25 AM 14,384 sbs_system.configuration.install.dll 01/05/2008 11:25 AM 14,352 sbs_system.data.dll 01/05/2008 11:25 AM 14,376 sbs_system.enterpriseservices.dll 01/05/2008 11:25 AM 14,344 sbs_VsaVb7rt.dll 01/05/2008 11:25 AM 14,352 sbs_wminet_utils.dll 01/05/2008 11:25 AM 16,896 SharedReg12.dll 04/11/2009 04:19 PM <DIR> v1.0.3705 01/19/2008 10:11 AM <DIR> v1.1.4322 04/21/2010 05:33 PM <DIR> v2.0.50727 02/13/2010 12:02 AM <DIR> v3.0 04/21/2010 05:33 PM <DIR> v3.5 04/21/2010 05:33 PM <DIR> v4.0.30128 18 File(s) 361,464 bytes 8 Dir(s) 7,884,308,480 bytes free
.NET Framework 1.0, 1.1, 2.0, 3.0, 3.5, 4.0 디렉터리가 존재하는 것을 확인할 수 있습니다. 여기서 1.0과 1.1은 관리 도구에 관련된 파일만이 포함되어있습니다. (64비트 버전을 이용할 수 있는 것은 아닙니다.) 그리고 Windows Azure VM의 버전이 1.1이므로 4.0 버전은 설치되어있지 않고, 디렉터리만 만들어져있는 상태입니다. 좀 더 나아가서, Global Assembly Cache에는 어떤 어셈블리들이 설치되어있는지도 선택적으로 살펴보겠습니다.
펼쳐두기..
Volume in drive D is Windows Volume Serial Number is F674-3730
Directory of d:\windows\assembly\gac_msil
02/16/2010 05:42 AM <DIR> Microsoft.Build.Conversion.v3.5 02/16/2010 05:42 AM <DIR> Microsoft.Build.Engine 02/16/2010 05:42 AM <DIR> Microsoft.Build.Framework 01/19/2008 10:11 AM <DIR> Microsoft.Build.Tasks 02/16/2010 05:42 AM <DIR> Microsoft.Build.Tasks.v3.5 01/19/2008 10:11 AM <DIR> Microsoft.Build.Utilities 02/16/2010 05:42 AM <DIR> Microsoft.Build.Utilities.v3.5 01/19/2008 01:53 PM <DIR> Microsoft.GroupPolicy.Reporting 01/19/2008 02:02 PM <DIR> Microsoft.GroupPolicy.Reporting.Resources
01/19/2008 10:11 AM <DIR> Microsoft.JScript 01/19/2008 10:11 AM <DIR> Microsoft.ManagementConsole 01/19/2008 02:02 PM <DIR> Microsoft.ManagementConsole.Resources 02/13/2010 12:02 AM <DIR> Microsoft.PowerShell.Commands.Management 02/13/2010 12:02 AM <DIR> Microsoft.PowerShell.Commands.Management. Resources 02/13/2010 12:02 AM <DIR> Microsoft.PowerShell.Commands.Utility 02/13/2010 12:02 AM <DIR> Microsoft.PowerShell.Commands.Utility.Res ources 02/13/2010 12:02 AM <DIR> Microsoft.PowerShell.ConsoleHost 02/13/2010 12:02 AM <DIR> Microsoft.PowerShell.ConsoleHost.Resource s 02/13/2010 12:02 AM <DIR> Microsoft.PowerShell.Security 02/13/2010 12:02 AM <DIR> Microsoft.PowerShell.Security.Resources 01/19/2008 01:53 PM <DIR> Microsoft.Storage.NfsCommon 01/19/2008 02:02 PM <DIR> Microsoft.Storage.NfsCommon.Resources 01/19/2008 01:53 PM <DIR> Microsoft.Storage.SanCommon 01/19/2008 02:02 PM <DIR> Microsoft.Storage.SanCommon.Resources 01/19/2008 01:53 PM <DIR> Microsoft.Storage.SanCommon.UI 01/19/2008 02:02 PM <DIR> Microsoft.Storage.SanCommon.UI.Resources 01/19/2008 01:53 PM <DIR> Microsoft.Storage.Vds 01/19/2008 10:11 AM <DIR> Microsoft.Tpm 01/19/2008 02:02 PM <DIR> Microsoft.Tpm.Resources 02/13/2010 12:02 AM <DIR> Microsoft.Transactions.Bridge 01/19/2008 10:11 AM <DIR> Microsoft.VisualBasic 01/19/2008 10:11 AM <DIR> Microsoft.VisualBasic.Compatibility 01/19/2008 10:11 AM <DIR> Microsoft.VisualBasic.Compatibility.Data 01/19/2008 10:11 AM <DIR> Microsoft.VisualBasic.Vsa 01/19/2008 10:11 AM <DIR> Microsoft.VisualC 02/16/2010 05:42 AM <DIR> Microsoft.VisualC.STLCLR 01/19/2008 10:11 AM <DIR> Microsoft.Vsa 01/19/2008 10:11 AM <DIR> Microsoft.Vsa.Vb.CodeDOMProcessor 02/13/2010 12:02 AM <DIR> Microsoft.Web.Administration 02/13/2010 12:02 AM <DIR> Microsoft.Web.Administration.Resources 02/13/2010 12:02 AM <DIR> Microsoft.Web.Management 02/13/2010 12:02 AM <DIR> Microsoft.Web.Management.Aspnet 02/13/2010 12:02 AM <DIR> Microsoft.Web.Management.Aspnet.Resources
02/13/2010 12:02 AM <DIR> Microsoft.Web.Management.AspnetClient 02/13/2010 12:02 AM <DIR> Microsoft.Web.Management.AspnetClient.Res ources 02/13/2010 12:02 AM <DIR> Microsoft.Web.Management.Iis 02/13/2010 12:02 AM <DIR> Microsoft.Web.Management.Iis.Resources 02/13/2010 12:02 AM <DIR> Microsoft.Web.Management.IisClient 02/13/2010 12:02 AM <DIR> Microsoft.Web.Management.IisClient.Resour ces 02/13/2010 12:02 AM <DIR> Microsoft.Web.Management.Remoting 02/13/2010 12:02 AM <DIR> Microsoft.Web.Management.Remoting.Resourc es 02/13/2010 12:02 AM <DIR> Microsoft.Web.Management.Resources 02/16/2010 06:12 AM <DIR> Microsoft.Web.Management.Rewrite 02/16/2010 06:12 AM <DIR> Microsoft.Web.Management.Rewrite.Client 02/16/2010 06:12 AM <DIR> Microsoft.Web.Management.Rewrite.Client.r esources 02/16/2010 06:12 AM <DIR> Microsoft.Web.Management.Rewrite.resource s 01/19/2008 01:53 PM <DIR> Microsoft.Windows.ServerManager 01/19/2008 02:02 PM <DIR> Microsoft.Windows.ServerManager.Resources
04/22/2010 02:06 AM <DIR> Microsoft.WindowsAzure.ServiceRuntime 01/19/2008 10:11 AM <DIR> Microsoft_VsaVb 01/19/2008 10:11 AM <DIR> MiguiControls 01/19/2008 02:02 PM <DIR> MiguiControls.Resources 01/19/2008 10:11 AM <DIR> MMCEx 01/19/2008 02:02 PM <DIR> MMCEx.Resources 01/19/2008 10:11 AM <DIR> MMCFxCommon 01/19/2008 02:02 PM <DIR> MMCFxCommon.Resources 0 File(s) 0 bytes 66 Dir(s) 7,884,111,872 bytes free
펼쳐두기..
Volume in drive D is Windows Volume Serial Number is F674-3730
Directory of d:\windows\assembly\gac_msil
02/16/2010 05:42 AM <DIR> Sentinel.v3.5Client 01/19/2008 02:02 PM <DIR> ServerManagerCmd.Resources 02/13/2010 12:02 AM <DIR> ServiceModelReg 01/19/2008 01:53 PM <DIR> SetupNfsIdMap 02/13/2010 12:02 AM <DIR> SMDiagnostics 02/13/2010 12:02 AM <DIR> SMSvcHost 02/13/2010 12:02 AM <DIR> srmgui 02/13/2010 12:02 AM <DIR> srmgui.resources 02/13/2010 12:02 AM <DIR> srmreports 02/13/2010 12:02 AM <DIR> srmreports.resources 01/19/2008 01:53 PM <DIR> StorageMgmt 01/19/2008 02:02 PM <DIR> Storagemgmt.Resources 01/19/2008 10:11 AM <DIR> sysglobl 01/19/2008 10:11 AM <DIR> System 02/16/2010 05:42 AM <DIR> System.AddIn 02/16/2010 05:42 AM <DIR> System.AddIn.Contract 02/16/2010 05:42 AM <DIR> System.ComponentModel.DataAnnotations 01/19/2008 10:11 AM <DIR> System.Configuration 01/19/2008 10:11 AM <DIR> System.Configuration.Install 02/16/2010 05:42 AM <DIR> System.Core 02/16/2010 05:42 AM <DIR> System.Data.DataSetExtensions 02/16/2010 05:42 AM <DIR> System.Data.Entity 02/16/2010 05:42 AM <DIR> System.Data.Entity.Design 02/16/2010 05:42 AM <DIR> System.Data.Linq 04/21/2010 05:33 PM <DIR> System.Data.Services 04/21/2010 05:33 PM <DIR> System.Data.Services.Client 04/21/2010 05:33 PM <DIR> System.Data.Services.Design 01/19/2008 10:11 AM <DIR> System.Data.SqlXml 01/19/2008 10:11 AM <DIR> System.Deployment 01/19/2008 10:11 AM <DIR> System.Design 01/19/2008 10:11 AM <DIR> System.DirectoryServices 02/16/2010 05:42 AM <DIR> System.DirectoryServices.AccountManagemen t 01/19/2008 10:11 AM <DIR> System.DirectoryServices.Protocols 01/19/2008 10:11 AM <DIR> System.Drawing 01/19/2008 10:11 AM <DIR> System.Drawing.Design 02/13/2010 12:02 AM <DIR> System.IdentityModel 02/13/2010 12:02 AM <DIR> System.IdentityModel.Selectors 02/13/2010 12:02 AM <DIR> System.IO.Log 01/19/2008 10:11 AM <DIR> System.Management 02/13/2010 12:02 AM <DIR> System.Management.Automation 02/13/2010 12:02 AM <DIR> System.Management.Automation.Resources 02/16/2010 05:42 AM <DIR> System.Management.Instrumentation 01/19/2008 10:11 AM <DIR> System.Messaging 02/16/2010 05:42 AM <DIR> System.Net 01/19/2008 10:11 AM <DIR> System.Runtime.Remoting 02/13/2010 12:02 AM <DIR> System.Runtime.Serialization 01/19/2008 10:11 AM <DIR> System.Runtime.Serialization.Formatters.S oap 01/19/2008 10:11 AM <DIR> System.Security 02/13/2010 12:02 AM <DIR> System.ServiceModel 02/13/2010 12:02 AM <DIR> System.ServiceModel.Install 02/13/2010 12:02 AM <DIR> System.ServiceModel.WasHosting 02/16/2010 05:42 AM <DIR> System.ServiceModel.Web 01/19/2008 10:11 AM <DIR> System.ServiceProcess 02/13/2010 12:02 AM <DIR> System.Speech 02/16/2010 05:42 AM <DIR> System.Web.Abstractions 02/16/2010 05:43 AM <DIR> System.Web.DynamicData 02/16/2010 05:42 AM <DIR> System.Web.DynamicData.Design 02/16/2010 05:43 AM <DIR> System.Web.Entity 02/16/2010 05:42 AM <DIR> System.Web.Entity.Design 02/16/2010 05:43 AM <DIR> System.Web.Extensions 02/16/2010 05:42 AM <DIR> System.Web.Extensions.Design 01/19/2008 10:11 AM <DIR> System.Web.Mobile 01/19/2008 10:11 AM <DIR> System.Web.RegularExpressions 02/16/2010 05:42 AM <DIR> System.Web.Routing 01/19/2008 10:11 AM <DIR> System.Web.Services 01/19/2008 10:11 AM <DIR> System.Windows.Forms 02/16/2010 05:42 AM <DIR> System.Windows.Presentation 02/13/2010 12:02 AM <DIR> System.Workflow.Activities 02/13/2010 12:02 AM <DIR> System.Workflow.ComponentModel 02/13/2010 12:02 AM <DIR> System.Workflow.Runtime 02/16/2010 05:42 AM <DIR> System.WorkflowServices 01/19/2008 10:11 AM <DIR> System.Xml 02/16/2010 05:42 AM <DIR> System.Xml.Linq 0 File(s) 0 bytes 73 Dir(s) 7,884,111,872 bytes free
그리고, 마지막으로 E 드라이브의 구조를 살펴보겠습니다. E 드라이브는 개발자가 업로드한 Web Role이나 Worker Role이 저장되는 파티션입니다. 보통 Windows Azure 응용프로그램이 실행되면 VM 내에서의 기본 디렉터리 위치는 E:\ (E 드라이브의 루트 디렉터리)가 됩니다.
펼쳐두기..
Volume in drive E has no label. Volume Serial Number is 5447-4618
Directory of E:\
04/22/2010 02:05 AM 0 244e457eeae84f5cb30862f26fec3b7c.0.cssx.t ag 04/22/2010 02:29 AM 9,954 7894b527-88ba-42f2-be12-eedc4e224778.csma n 04/22/2010 02:05 AM <DIR> approot 04/22/2010 02:05 AM <DIR> base 01/31/2010 10:04 AM 18,015 Cloud.uar.csman 04/22/2010 02:05 AM <DIR> diagnostics 04/21/2010 05:28 PM 532 RuntimeSetup.Manifest 04/22/2010 02:05 AM <DIR> storage 04/22/2010 02:29 AM 944 [Content_Types].xml 04/22/2010 02:05 AM <DIR> _rels 04/21/2010 05:28 PM 16 __entrypoint.txt 6 File(s) 29,461 bytes 5 Dir(s) 1,034,371,072 bytes free
위의 항목들 중에서 approot 디렉터리에는 우리가 개발한 Web Role이나 Worker Role 프로젝트 파일들의 사본이 배포됩니다. 그리고 Windows Azure VM 내에서는 __entrypoint.txt 파일에 서술된 DLL 파일을 찾아 해당 항목을 Loading하는 것으로 이해할 수 있겠습니다.
펼쳐두기..
Volume in drive E has no label. Volume Serial Number is 5447-4618
Directory of e:\approot
04/22/2010 02:05 AM <DIR> . 04/22/2010 02:05 AM <DIR> .. 04/22/2010 02:05 AM <DIR> bin 04/21/2010 05:22 PM 110 CommandDelegate.asmx 04/18/2010 11:37 AM 446 Default.aspx 04/22/2010 02:05 AM <DIR> Scripts 04/21/2010 05:28 PM 8,075 Web.config 3 File(s) 8,631 bytes 4 Dir(s) 1,034,371,072 bytes free
그 외에 base에는 Windows Azure 구동에 관한 핵심 DLL들이, storage에는 Windows Azure Drive 관련 API를 제공하는 DLL들이, diagnostics에는 진단 도구 및 ETW 관련 API들이 포함된 DLL 및 응용프로그램들이 포함되어있습니다.
그 외에, Windows Azure의 상세한 디스크 정보를 파악하기 위하여 diskpart 같은 명령어를 테스트해보기도 하였지만 COM 관련 기능의 부재로 아래와 같은 오류 메시지가 나타나는 것도 확인하였습니다.
펼쳐두기..
Microsoft DiskPart version 6.0.6002 Copyright (C) 1999-2007 Microsoft Corporation. On computer: RD00155D3127B6
DiskPart encountered an error starting the COM services.
Windows Azure OS의 내부 빌드는 ver 명령을 통하여 확인할 수 있었습니다.
Microsoft Windows [Version 6.0.6002]
whoami를 이용하여 현재 Role을 실행하는 사용자의 이름도 확인할 수 있었습니다.
cis\ab279a57-70bb-4dd5-a4ba-fe7f60abfca2
그리고, Standard User Account로 실행 중이기 때문에, netstat -nab 같은 명령어나 fsutil 같은 명령어는 각각 아래와 같은 권한 상승 필요 메시지가 나타남을 확인할 수 있었습니다.
펼쳐두기..
The FSUTIL utility requires that you have administrative privileges.
The requested operation requires elevation.
대신, netstat 명령만을 실행하였을 때는 아래와 같이 간단한 네트워크 현황을 볼 수 있습니다.
프로그램 작성에 좋은 지침이 되는 환경 변수들 몇 가지를 살펴보면, SystemDrive, RdRoleRoot, RoleRoot, PATH 같은 환경 변수들이 있겠습니다. 그리고 USERDOMAIN, COMPUTERNAME, COMSPEC 및 프로세서 관련 환경 변수들도 시스템을 분석하는데에는 역시 도움이 되는 정보들이 되겠습니다.
Windows Azure OS 내의 파일 시스템 구성은 오늘 소개한 내용이 대략적인 내용이 될 것 같습니다. Windows Azure OS의 파일 시스템과 설정을 좀 더 상세히 살펴볼 수 방법은 앞으로도 지속적으로 업데이트하겠습니다. 긴 글 읽어주셔서 감사합니다. :-)
프로그래밍을 하거나 컴퓨터 관리 작업 따위를 하면서 파일이나 폴더에 관한 경로 문제는 다루기가 참 껄끄럽다. 특히 프로그래밍을 할 때에는 파일이나 폴더에 관해서만큼은 정확하고 세심해야 한다고 생각하기 때문에 어떤 기준이 필요하다고 개인적으로 생각한다.
적어도 몇 가지 디렉터리에 관해서는 확실히 해두면 편리하지 않을까라는 생각에서 우연히 환경 변수들을 조사해보기 시작하게 되었다. 환경 변수들 가운데서는 우리가 전혀 모르고 있었거나 기억에서 사라진 변수들도 꽤 있다.
%WINDIR%와 %SYSTEMROOT%: 현재 실행 중인 Windows 운영 체제가 설치된 경로를 저장하는 환경 변수이다. 여기에는 설치된 파티션을 가리키는 드라이브 문자도 같이 포함된다. 이 변수를 기준으로 System32 폴더에는 매우 손쉽게 접근할 수 있을 것이다.
%PROGRAMFILES%: 현재 실행 중인 Windows 운영 체제와 직접 관련이 있는 Program Files 폴더에 대한 경로를 저장하는 환경 변수이다. %WINDIR% 변수와 마찬가지로 설치된 프로그램에 대한 손쉬운 접근을 하고 싶다면 이 변수를 이용하면 된다.
%HOMEDRIVE%: 현재 로그인한 사용자의 프로파일 디렉터리가 위치한 파티션 드라이브의 문자를 저장하는 환경 변수이다. C:, D: 같은 값을 반환한다.
%SYSTEMDRIVE%: 현재 실행 중인 Windows 운영 체제가 설치된 파티션의 드라이브 문자를 저장하는 환경 변수이다. C:, D: 같은 값을 반환한다.
%USERPROFILE%: Documents And Settings 폴더 아래의 현재 로그인한 사용자의 프로파일 디렉터리 경로를 저장하는 환경 변수이다.
%ALLUSERSPROFILE%: 새로운 사용자를 생성하거나 여러 사용자에 걸쳐서 공통되는 내용을 저장하는 공용 사용자의 프로파일 디렉터리 경로를 저장하는 환경 변수이다.
%COMSPEC%: cmd.exe 프로그램의 경로를 %WINDIR% 등의 변수로 일일이 찾지 않아도 이 변수 하나면 바로 가리킬 수 있다.
%APPDATA%: 현재 로그인한 사용자의 프로파일 디렉터리 밑의 Application Data 폴더에 대한 경로를 저장하는 환경 변수이다.
%COMMONPROGRAMFILES%: Common Program Files 폴더에 대한 디렉터리 경로를 저장하는 환경 변수이다.
%LOGONSERVER%: 현재 로그인한 서버의 UNC 경로나 Active Directory 경로 등을 저장하는 환경 변수이다.
%NUMBER_OF_PROCESSORS%: 시스템에 장착된 CPU 코어의 수를 저장하는 환경 변수이다.
%OS%: 기본적으로 Windows_NT 라는 문자열을 반환한다.
%PATH%: 따로 설명하지 않아도 너무 유명한 환경 변수이다. 명령어 해석기나 Shell 실행 등에서 검색할 기본 경로들을 이곳에 넣어주어도 되고 반대로 세미콜론을 토큰 분할자로 사용하여 각각의 경로를 찾을 수도 있다.
%PATHEXT%: %PATH%로 검색하고자 하는 파일의 유형들을 이곳에서 설정하면 된다. 주로 실행 파일의 확장자들을 이곳에 배치시켜두는 것이 일반적이다.
%PROCESSOR_ARCHITECTURE%: 프로세서의 아키텍처를 설명하는 문자열을 저장하는 환경 변수이다. 우리가 사용하는 컴퓨터들을 기준으로 해보면 주로 x86이라는 문자열을 반환할 확률이 높다.
%PROCESSOR_IDENTIFIER%: 프로세서 식별 문자열을 저장하는 환경 변수이다.
%PROCESSOR_LEVEL%과 %PROCESSOR_REVISION%: 프로세서의 기타 세부 정보들을 저장하는 환경 변수들이다.
%PROMPT%: 명령 프롬프트의 프롬프트 서식을 가져오거나 설정할 수 있는 환경 변수이다.
%TEMP%와 %TMP%: 현재 사용자에게 할당된 임시 디렉터리 경로를 저장하는 환경 변수들이다.
%ERRORLEVEL%: 어떤 프로그램을 실행하고난 직후 그 프로그램이 반환한 코드 값을 저장하는 환경 변수이다.
환경 변수들을 쭉 살펴보면서 상당히 편리하고 유리한 것들이 많다는 것을 알 수 있다. 그런데 환경 변수에는 놀랍게도 두 가지 맹점이 있다. 첫 번째는 일부 환경 변수들은 사용자나 관리자에 의해서 임의로 편집될 수 있다는 것과 두 번째는 정식으로 Windows 운영 체제를 설치하여 구동한 환경이 아닌 Windows Preinstallation Environment에서는 위에서 언급한 환경 변수들을 사용할 수 없다.