0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

デバイスファイル

Posted at

とりあえずデバイスファイルにアクセスしてみる

通常/dev/ディレクトリ以下に存在します。
Linuxでは、プロセスがデバイスファイルを操作すると、カーネルの中のデバイスドライバというソフトウェアがユーザの代わりにデバイスにアクセスします。

vboxuser@*********:*************$ ls -l /dev/
合計 0
crw-r--r--  1 root     root     10, 235  5月 23 07:12 autofs
drwxr-xr-x  2 root     root         400  5月 23 07:12 block
...
brw-rw----  1 root     disk      7,   0  5月 23 07:12 loop0
...
crw-rw-rw-  1 root     tty       5,   0  5月 23 07:12 tty
...

気づき

lsというプロセスがカーネルがデバイスドライバを使って表示するように操作しているのか。

デバイスファイルの情報

ファイルの種類

キャラクタデバイスまたはブロックデバイスがある。
...
行頭がcであればキャラクタデバイス、bであればブロックデバイス

デバイスのメジャー番号、マイナー番号

メジャー番号とマイナー番号の組み合わせが同じであれば同じデバイスに対応しており、そうで�れば別のデバイスに対応している
第五フィールドがメジャー番号、第6フィールドがマイナー番号

気づき

/div/autofsはキャラクタデバイスで別のデバイスに対応している。
/div/loop0はブロックデバイスでこれも別のデバイスに対応している.

別のデバイスはどこにあるんだろう?

キャラクタデバイス

読み出しと書き込みはできますが、デバイス内でアクセスする場所を変更するシーク操作はできません。

プロセスとそれに対応する端末を調べる

root@*********:*************# ps ax | grep bash
   2681 pts/0    Ss     0:00 bash
   3945 pts/0    S      0:00 bash
   4052 pts/0    S+     0:00 grep --color=auto bash

root@*********:*************# ps ax | grep bash
   2681 pts/0    Ss     0:00 bash
   3945 pts/0    S      0:00 bash
   4064 pts/1    Ss+    0:00 bash
   4160 pts/0    S+     0:00 grep --color=auto bash

気づき

pts/0という端末を使っている。/dev/pts/0というファイルがこの端末に対応するデバイスファイル
デバイスファイルが端末と繋がっているからといってどういうことになるんだろう。

デバイスファイルに標準出力のリダイレクトをする

root@*********:*************# echo hello > /dev/pts/0
hello
root@*********:*************# echo hello > /dev/pts/1

これはecho helloコマンドを発行した場合と同じ結果です。

気づき

キャラクタデバイスは値をread()してwrite()システムコールで端末に出力したのか

ブロックデバイス

ファイルの読み書き以外に、シークができます。代表的なブロックデバイスはHDDやSSDなどのストレージファイルです。ブロックデバイスにデータを読み書きすることによって、通常のファイルのように、ストレージの所定の位置にあるデータにアクセスできます。

シークとは

ITの分野では、目的のものを探し出す、目的の場所を見つけて移動する(させる)

出典

気づき

エラーが起きてできなかった。
ストレージからいろんな情報を取得できるのはこれのおかげなのか
空きのパーティションがわからなかった。そして見つけたと思ってもサンプルコードのようにならなかった。

root@*********:*************# lsblk -ip
NAME        MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
/dev/loop0    7:0    0  55.3M  1 loop /snap/core18/1885
....
/dev/sda      8:0    0    25G  0 disk 
|-/dev/sda1   8:1    0   512M  0 part /boot/efi
|-/dev/sda2   8:2    0     1K  0 part 
`-/dev/sda5   8:5    0  24.5G  0 part /
/dev/sr0     11:0    1  1024M  0 rom  

ループデバイス

空いているデバイスやパーティションが無かったり、あるいはディスクの内容を破壊しかねない操作はしたくないなどの理由が考えられます。このような場合はループデバイスという機能がが使えます。

root@*********:*************# fallocate -l 1G loopdevice.img
root@*********:*************# sudo losetup -f loopdevice.img
root@*********:*************# losetup -l
NAME SIZELIMIT OFFSET AUTOCLEAR RO BACK-FILE                        DIO LOG-SEC
/dev/loop1
             0      0         1  1 /*************/bare_5.snap   0     512
.....
             0      0         0  0 /*************/loopdevice.img
                                                                      0     512
.....
root@*********:*************# vim copy.txt
root@*********:*************# sudo mkfs.ext4 /dev/loop12
mke2fs 1.45.5 (07-Jan-2020)
Discarding device blocks: done                            
...
Writing superblocks and filesystem accounting information: done

root@*********:*************# mkdir mnt
root@*********:*************# sudo mount /dev/loop12 mnt
root@*********:*************# mount
sysfs on /sys type sysfs (rw,nosuid,nodev,noexec,relatime)
....
/dev/loop12 on ************/mnt type ext4 (rw,relatime)
root@*********:*************#:/*************# echo "hello world" >/mnt/testfile
root@*********:*************# ls /mnt/
testfile
root@*********:*************# cat /mnt/testfile 
hello world
root@*********:*************# umount /mnt
umount: /mnt: not mounted.
root@*********:*************# umount /mnt/
umount: /mnt/: not mounted.
root@*********:*************# umount /mnt
umount: /mnt: not mounted.
root@*********:*************# strings -t x /dev/loop12
   1018 'V9Q
...
38001018 'V9Q
root@*********:*************# sudo umount mnt
root@*********:*************# strings -t x /dev/loop12
   1018 'V9Q
1091020 lost+found
...
38001018 'V9Q
root@*********:*************# sudo losetup -d /dev/loop12
root@*********:*************# rm loopdevice.img 

出典

感想

少ししか理解できないことが理解できた。
次は理解できるようにする

0
0
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?