fdisk로 4K 섹터 정렬된 파티션 생성

parted나 fdisk나 4K 정렬을 지원하지만 그냥 생성한다고해서 정렬 된 파티션으로 생성되지않는다. 정렬되지 않았다고 그냥 경고 메시지만 출력할 뿐(…) 직접 계산하여 생성할 수 있겠지만 그럴 필요성까지는 느껴지지않는다. parted같은 경우 정렬 된 파티션을 생성하려면 이전에 남긴 “Parted 사용정리” 글을 보면 될것이고 fdisk는 실행할 때 옵션을 주면 된다.

1. fdisk 버전 2.17.1 미만일경우
# fdisk -S 32 -H 64 disk.img

2. fdisk 버전 2.17.1 이상일경우
# fdisk -c -u disk.img

이렇게 실행하여 경우 결과는 아래와같다.

Welcome to fdisk (util-linux 2.30.2).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.


Command (m for help): n
Partition type
   p   primary (0 primary, 0 extended, 4 free)
   e   extended (container for logical partitions)
Select (default p):

Using default response p.
Partition number (1-4, default 1):
First sector (2048-262143, default 2048):
Last sector, +sectors or +size{K,M,G,T,P} (2048-262143, default 262143): +10K

Created a new partition 1 of type 'Linux' and of size 10 KiB.

Command (m for help): n
Partition type
   p   primary (1 primary, 0 extended, 3 free)
   e   extended (container for logical partitions)
Select (default p):

Using default response p.
Partition number (2-4, default 2):
First sector (2068-262143, default 4096):
Last sector, +sectors or +size{K,M,G,T,P} (4096-262143, default 262143):

Created a new partition 2 of type 'Linux' and of size 126 MiB.

Command (m for help): p
Disk disk.img: 128 MiB, 134217728 bytes, 262144 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0xe765896f

Device     Boot Start    End Sectors  Size Id Type
disk.img1        2048   2067      20   10K 83 Linux
disk.img2        4096 262143  258048  126M 83 Linux

Command (m for help):

그런데 정렬된 파티션을 생성할 때 왜 2048섹터가 시작점이 되는지 모르겠다. 섹터당 512 bytes라면 8섹터가 4096바이트, 2048섹터는 1메가바이트인데… 구글링해도 시원한 답이 안보인다. 그냥 넘어가야겠다.

추가내용) 4K 섹터 정렬에 대한 잘 설명된 글은 데스게이트의 글인 고급 포맷 4K 섹터 하드 드라이브로의 전환에서 볼 수 있다. (왜 데스게이트라고 불리는지는 나무위키 Seagate 페이지의 돌연사 항목을 보자. 나중에 번호가 바뀌더라도 돌연사 항목을 찾아서 보면 될것이다. WD는 자회사인 HGST보다 안정성 떨어져 불량이 많이 늘어 마찬가지로 신뢰 안하는 중. 모든 하드가 다 마찬가지긴 한데 쓰려면 최소한 RAID-1을 써야 나중에 피 안본다.)

참고페이지: Partition Alignment

윈도 10에서 음향 출력이 외곡될 때

집에서는 주로 효과를 끄고사용하기때문에 문제없이 음악을 듣고있지만 회사 노트북에서 음악을 들으면서 뭔가 이상하다는 느낌을 받아서 확인해보니 역시나… 윈도의 사운드 효과 때문이였다.

해당 옵션을 확인하기 위해서는 작업표시줄의 트레이아이콘 영역의 스피커 아이콘에서 우클릭하여 재생 장치를 클릭하여 설정창을 연다.

재생 장치에서 기본장치로 설정된 장치를 더블클릭하거나 우클릭하여 속성을 클릭하여 속성창을 연다.

회사 노트북은 아래와같이 해당 설정 페이지가 한글로 표시되어있다. (이미 옵션을 꺼두었기때문에 모든 사운드 효과 사용 안함이 체크되어있다.)

하지만 집 컴퓨터는 아래와같이 영어로 되어있다.

둘 다 같은 기능을 하는 페이지이니 해당 페이지에서 모든 사운드 효과 사용 안함을 체크하고 확인이나 적용을하면 외곡되지않은 원음을 들을 수 있다. (리스트에서 체크되어있는것이 없음에도 외곡되는걸 보면 기본적으로 활성회되어있는 효과가 있는거같다.)

지금은 회사에서 포스팅하느라 광 출력도 외곡이 되는지 확인을 못하지만 귀찮으니 퇴근하더라도 확인은 패스한다(…).

윈도 7을 쓸 때 게임을 하다보면 여러 소리가 섞일 때(아마 peak수치까지 사운드가 올라갈 때 일듯하다.) 자동으로 gain이 내려가버리는 효과같은것이 있었는데 그 때 이것저것 건들다 이 옵션을 알게되었다. 저것을 끄고나서는 지금까지 이상한점 없이 문제없이 사용하고있는것같다.

일단 소프트웨어로 무언가 처리를 한다는것은 출력에 딜레이를 발생시키는것이니 리듬게임을 한다거나 매우매우 미묘하게 싱크가 안맞는다 싶으면 이런 소프트웨어 사운드 효과는 끄도록 해보자.

이상 끗.

덧. 그런데 왜 MS는 멀쩡한 하드웨어에다가 이상한 소프트웨어 처리를 끼얹고있는걸까? 외곡으로 느껴지지않게 자연스러운 음향효과가 들어가는건 좋은데 외곡으로 느껴질 정도로 음향효과를 주니 문제(…).

parted 사용 정리

사용할 때 마다 구글링하게되어 남기는 단순 메모목적 글.

– 파티션 테이블 초기화
mklabel [msdos | gpt | etc…]

– 파티션 생성
mkpart [primary | logical | extended] [btrfs | ext2~4 | fat32 | fat16 | etc…] start end
시작이 0이면 정렬되지 않은 파티션이라는 경고가 나온다.
2048s 이런식으로 s를 붙여서 윈도와 호환을 위한 정렬 된 파티션 생성 가능.
메뉴얼에서는 단위를 MiB로 지정하는데 이유는 몰라도 MiB로 지정하면 4K 섹터 정렬이 되는가보다(…)
ex)
mkpart p fat16 2048s 32MiB
mkpart p ext4 32MiB 512MiB
mkpart p ext4 512MiB -1s
위와같이 생성하면 경고 없이 잘 만들어졌다.

– 부팅가능 플레그 지정
set 1 boot on

– 결과
Disk /home/iruis/RPiCM3.img: 839MB
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags:

Number Start End Size Type File system Flags
1 1049kB 33.6MB 32.5MB primary boot, lba
2 33.6MB 537MB 503MB primary
3 537MB 839MB 302MB primary

좀 더 알아보고 싶지만 귀찮다. 그냥 이쯤에서 끝.

Bluetooth A2DP on Linux

– 삽질 기록용 –

라즈베리파이의 블루투스를 사용해서 aux단자 출력을 하려했는데… 연결된 장치에서 전송하는 포맷에따라서 디코딩이 실시간으로 안되어 툭툭 끊기는 현상이있었다(…)

결국 메인 PC에서 사용하고있던 인텔 듀얼링크 무선랜을 때다가 사용하고있는 젠투리눅스에 연결-_-;; (어차피 유선으로 사용하고있었고 블루투스도 연결된 기기가 없기에)

기본적으로 Gentoo Wiki의 이 페이지에 기술된 내용대로 빌드되어있으면 일부 기기(ex 안드로이드)에서 스트리밍되는 음원 재생 문제없지만, TV나 아이폰에서 전송되는 음원을 디코딩하지 못하였다. 대부분 다른 배포본 위주의 설명이라 그냥 감으로 해보았는데… 일단 성공하였다. (아직 해결되어야할게 한가지있지만.)

일단 사용한 pulseaudio의 USE 옵션은 아래와같다. 아마도 libsamplerate 이 USE 옵션이 핵심인거같다. (우분투같은경우 리소스가 너무나도 많으니 패스.)
X alsa alsa-plugin asyncns bluetooth caps dbus gdbm glib gnome gtk ipv6 libsamplerate native-headset orc qt4 realtime ssl systemd tcpd udev webrtc-aec

이제 블루투스에서 오디오를 사용하기 위해서는 아래와같이 설정한다.

/etc/bluetooth/audio.conf (기본적으로 없으므로 생성, 내용출처)

# Configuration file for the audio service

# This section contains options which are not specific to any
# particular interface
[General]

# Switch to master role for incoming connections (defaults to true)
Master=true

# If we want to disable support for specific services
# Defaults to supporting all implemented services
#Disable=Control,Source
Enable=Source

# SCO routing. Either PCM or HCI (in which case audio is routed to/from ALSA)
# Defaults to HCI
#SCORouting=PCM

# Automatically connect both A2DP and HFP/HSP profiles for incoming
# connections. Some headsets that support both profiles will only connect the
# other one automatically so the default setting of true is usually a good
# idea.
AutoConnect=true

# Headset interface specific options (i.e. options which affect how the audio
# service interacts with remote headset devices)
[Headset]

# Set to true to support HFP, false means only HSP is supported
# Defaults to true
HFP=true

# Maximum number of connected HSP/HFP devices per adapter. Defaults to 1
MaxConnected=1

# Just an example of potential config options for the other interfaces
#[A2DP]
#SBCSources=1
#MPEG12Sources=0

/etc/pulse/system.pa (마지막 부분에 추가, 내용출처)

### Automatically load driver modules for Bluetooth hardware
.ifexists module-bluetooth-policy.so
load-module module-bluetooth-policy
.endif

.ifexists module-bluetooth-discover.so
load-module module-bluetooth-discover
.endif

load-module module-switch-on-connect 도 한라인 추가하였다. 정확한 내용은… 기억 안난다. 패스.

마지막으로 아래 github 저장소에서 simple-agent.autotrust, bluezutils.py 두개의 파일을 다운받아서 simple-agent.autotrust를 실행시킨다. (이벤트를 처리안하면 오디오 연결이 안된다.)
https://github.com/BaReinhard/Super-Simple-Raspberry-Pi-Audio-Receiver-Install/tree/master/usr/local/bin

만약 장치이름을 바꾸고싶다면 /etc/bluetooth/main.conf 파일에서 Name을 바꿔주면 되고 DiscoverableTimeout 항목을 0으로 설정하면 discovering를 무한으로 한다. Policy에서 AutoEnable을 true로 설정하는것도 있던데 차이는 모르겠다.

또한 Class 항목을 0x200414로 바꾸면 오디오 장치로 블루투스가 인식된다. 일부 장치는 기본값을 사용하면 스피커 장치가 아니여서 목록에 나타나지않는다. 젠투에서는 Class 값이 적용되지않아 hciconfig hci0 class 0x200414 명령을 실행하여 변경하였다.

systemctl restart bluetooth 명령으로 서비스를 재실행하여 변경된 내용들 적용. (아마 재부팅 해야할수도있다.)

A2DP 스택이 적용되었으면 bluetoothctl에서 show 커맨드를 실행하면 아래와같이 나온다.

Controller 7C:5C:F8:D7:99:7E
        Name: BlueZ Gentoo
        Alias: BlueZ Gentoo
        Class: 0x000000
        Powered: yes
        Discoverable: yes
        Pairable: yes
        UUID: Headset AG                (00001112-0000-1000-8000-00805f9b34fb)
        UUID: Generic Attribute Profile (00001801-0000-1000-8000-00805f9b34fb)
        UUID: A/V Remote Control        (0000110e-0000-1000-8000-00805f9b34fb)
        UUID: OBEX File Transfer        (00001106-0000-1000-8000-00805f9b34fb)
        UUID: Generic Access Profile    (00001800-0000-1000-8000-00805f9b34fb)
        UUID: OBEX Object Push          (00001105-0000-1000-8000-00805f9b34fb)
        UUID: PnP Information           (00001200-0000-1000-8000-00805f9b34fb)
        UUID: A/V Remote Control Target (0000110c-0000-1000-8000-00805f9b34fb)
        UUID: IrMC Sync                 (00001104-0000-1000-8000-00805f9b34fb)
        UUID: Audio Source              (0000110a-0000-1000-8000-00805f9b34fb)
        UUID: Audio Sink                (0000110b-0000-1000-8000-00805f9b34fb)
        UUID: Message Notification Se.. (00001133-0000-1000-8000-00805f9b34fb)
        UUID: Phonebook Access Server   (0000112f-0000-1000-8000-00805f9b34fb)
        UUID: Message Access Server     (00001132-0000-1000-8000-00805f9b34fb)
        Modalias: usb:v1D6Bp0246d052B
        Discovering: no

여기서 중요한것이 Audio Sink.

오디오 장치로 연결이 잘 되었다면 pactl list sources short명령을 치면 아래와같이 나온다.

1       alsa_output.pci-0000_00_1b.0.analog-stereo.monitor      module-alsa-card.c      s16le 2ch 48000Hz       IDLE
2       alsa_input.pci-0000_00_1b.0.analog-stereo       module-alsa-card.c      s16le 2ch 44100Hz       SUSPENDED
3       alsa_output.pci-0000_00_03.0.hdmi-stereo.monitor        module-alsa-card.c      s16le 2ch 44100Hz       SUSPENDED
7       bluez_source.F8_3F_51_27_C2_1F.a2dp_source      module-bluez5-device.c  s16le 2ch 48000Hz       RUNNING

아직은 Gnome Desktop에 사용자가 로그인되어야 음원이 출력되는 문제가있지만… 더 깊이 알아보기 귀찮다. 어차피 24시간 켜놓는것이니까 -_-;;
어차피 두면 잠금화면이 뜨기때문에 걍 다음에 의욕이 생길 때 까진 이렇게 써야겠다.

https://github.com/BaReinhard/Super-Simple-Raspberry-Pi-Audio-Receiver-Install/blob/master/usr/local/bin/volume-watcher.py 이 파일은 AVRCP 이벤트를 처리하는것이지만… 역시나 귀찮…

https://ludwig.im/en/projects/steam-pulseaudio-sound-latency-lagging-problem-noise 이것은 latency를 줄이기 위한 팁

덧) 위와같이 별별삽질 다 해봐야 무선 특유의 지연시간 사라지지않고 결국 그냥 제품으로 잘 나와있는거 사는게 정신건강과 시간적으로 더 이득이라는 생각이 드는건 안비밀. 결국 주머니 사정(…). 일단 두어달 후에 그냥 옵티컬 DAC 잘 나온거 하나 사야겠다 -_-;;

오늘의 랜섬웨어 업데이트 삽질기(…)

오랜만에 윈도우와의 즐거운 삽질이였다(…).

오늘은 떠들석한 랜섬웨어 업데이트 공문이있었다. ‘랜선을 뽑고’ SMB/CIFS를 제거하고 업데이트하라고 되어있지만 아마도 대부분은 이미 인터넷 다 하고 문서를 받은 뒤 늦게서야 SMB/CIFS를 제거했을거같은데… 이미 내부에서 랜섬웨어가 돌고있었다면 업데이트 하기전에 걸려버릴 가능성이 있을거같다.

잡설은 끝내고, 문서를 자세히 안보고(…) Windows Server 2012 R2에서 업데이트 네개를 받았는데 업데이트 내용을 아무리 다시봐도 별반 달라보이는거 없어서 문서를 다시보니 아래 테이블 아래 “1개 이상 패치번호 일치 시 패치완료”라는 문구가있었다. 즉 Windows Server 2012 R2라면 패치번호에있는 네개 업데이트를 전부 해야하는게아니라 그중에 한가지가 있으면 되는거였다(…).

번호 운영체제 패치번호 비고
1 Windows Vista SP2 KB4012598
2 Windows Server 2008
3 Windows 7 KB4012212, KB4012215
4 Windows Server 2008 R2
5 Windows 8.1 KB4012213, KB4012216
6 Windows Server 2012 KB4012213, KB4012214, KB4012216, KB4012217
7 Windows Server 2012 R2
8 Windows RT 8.1 KB4012216
9 Windows 10 KB4012606, KB4013198, KB4013429
10 Windows Server 2016 KB4013429
11 Windows Vista KB4012598 취약OS
12 Windows 8
13 Windows Embedded 8
14 Windows XP
15 Windows Server 2003

인터넷 안되는 PC여서 그간 업데이트 안해서인지 위 보안 업데이트가 안되어 기술문서 찾고찾아보니 결국 해결법은 이전에 삽질했던것과 동일한 이것이였다는건 안비밀.