2025年11月10日月曜日

 

自由空間伝搬損失

式:

FSPL(dB)= 20 log10(d) + 20 log10(f) + 20 log10(4π/c) - GTx - GRx

変数、定数:

  • d = 距離(メートル単位)
  • f = 周波数(Hz)
  • c = 光速(3×108 m/s)
  • GTx = 送信アンテナ利得(dBi)
  • GRx = 受信アンテナ利得(dBi)

https://ib-lenhardt.com/jp/kb/calculators/line-of-sight  結構有用

2025年11月4日火曜日

配布用イメージファイル作成

 参照: https://qiita.com/noguhiro2002/items/60103e6bd21134cad543



Raspberry PiのMicro SDカードから配布用imageファイルを作る with Ubuntu 18.04 LTS

最終更新日 投稿日 2020年02月24日

はじめに

Raspberry Piでデバイスを開発した!MicroSDの中身をImage ファイルに書き出して配布したい!でもやり方がわからない!そんなお方向けのマニアチックなQiitaです。

なお、MicroSDのバックアップおよびクローン作成にも最適です。

注意:まずは本内容が動くかどうかテスト用のMicroSDでテストしてから、目的のMicroSDで試してください。本メソッドを用いて生じた損害などについて筆者は一切の責任を持ちません。

Material

  • 配布用imageを作りたいRaspberry PiのMicroSD (今回はRaspberry Pi3B+のRaspbian Buster, 32GB)
  • Ubuntu 18.04 LTS (作業用PC)
  • GParted (Linux用パーテション編集ソフト.今回の主役)

Method

  1. GPartedをUbuntuへインストール

    $ sudo apt update
    $ sudo apt upgrade
    $ sudo apt install gparted
    
  2. Raspberry Piから取り出したMicroSDを、Ubuntuが入っているPCへ入れる。

  3. どのUSBデバイスとして認識されているのか、$ sudo fdisk -lで確認する。ここからの操作を間違えるとデータ全損失につながる可能性があるので注意!

    $ sudo fdisk -l
    ...
    Disk /dev/sdc: 29.2 GiB, 31312576512 bytes, 61157376 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: 0x000816c0
    ...
    # 今回は/dev/sdcでした。
    
  4. ddコマンドを用いてブロック単位でバックアップを行います。これでパテーション/ファイルシステムによらず、MicroSDの中身すべてのバックアップが可能になります。ddコマンドを使用する際は、if(input file)とof(output file)の指定に注意してください!間違えると一瞬でデータが飛びます!(参考: Arch linux, ディスクのクローン)。

    $ sudo dd bs=1M if='/dev/sdx' of='/path/to/image/file/hoge.img' status=progress
    # ifはMicroSDのデバイス場所今回は'/dev/sdc'
    # ofはimageファイルのパス。ファイル名は自由。拡張子は'.img'。
    # 終了までしばらく待ちます。
    31301042176 bytes (31 GB, 29 GiB) copied, 
    1469 s, 21.3 MB/s
    29862+0 records in
    29862+0 records out
    31312576512 bytes (31 GB, 29 GiB) copied, 
    1470.23 s, 21.3 MB/s
    
  5. 吸い出したimgファイルを、/dev/loop(ループバックデバイス)にマウントし、GPartedで編集します。

    $ sudo losetup -f    # /dev/loop (ループバックデバイス)の空きを探します。
    /dev/loop18    # 今回は /dev/loop18 でした。
    $ sudo losetup /dev/loop18 '/path/to/image/file/hoge.img'  # 空いていた/dev/loop (今回は/dev/loop18) に dd で吸い取った img ファイルをマウントします。
    $ sudo partprobe /dev/loop18  # パーティションテーブルを変更したことをOSに知らせます。
    $ sudo gparted /dev/loop18  # GPartedを起動します。
    
  6. GPartedでパーティションの編集を行います。

  7. RaspbianをNOOBSでインストールすると、このように複雑なパーティションに分かれています。Raspbianを直にインストールしていればもっと単純なはずです (参考:バックアップしたイメージファイルを縮小する)。
    Screenshot from 2020-02-23 21-37-25.png

  8. パーティションが可視化されたバーの白い部分が空きスペース (データは書き込まれていないが容量は食っている部分) なので、ここを減らします。一番下の/dev/loop18p7をクリックし、その上で右クリック --> Resize/Moveを選択し、Resize/Move windowを開きます。
    Screenshot from 2020-02-23 21-51-05.png
    Screenshot from 2020-02-23 21-52-28.png

  9. スケールバーをドラッグし、白いフリー部分を黄色のデータが存在する領域付近まで持っていきます。なお、このときギリギリまでもってくると失敗します(Trouble-Shooting参照)。その後、Resize/Moveをクリックし、パーティション変更情報を保存します(まだパーテションの変更処理は行われていません)。
    Screenshot from 2020-02-23 21-52-45.png
    Screenshot from 2020-02-23 21-52-56.png

  10. /dev/loop18p7の領域は変更されましたが、親である/dev/loop18p2はまだ変更されていません。/dev/loop18p2を選択し、その上で右クリック --> Resize/Moveを選択し、Resize/Move windowを開きます。先ほどと同様、スケールバーをドラッグし、unallocated部分(灰色)を減らしますが、今回はピッチリ黄色の/dev/loop18p7へ寄せます。その後、Resize/Moveをクリックし、パーティション変更情報を保存します(まだパーテションの変更処理は行われていません)。
    Screenshot from 2020-02-23 21-53-06.png
    Screenshot from 2020-02-23 21-53-02.png

  11. パーティション変更情報がこの状態になったことを確認し、GParted window上部中央やや左の緑の✔マークをクリックし、プロセスを開始します。
    Screenshot from 2020-02-23 21-53-12.png

  12. 警告画面が表示されますが、Applyをクリックしてパーティションの編集処理をスタートします。
    Screenshot from 2020-02-23 21-54-05.png
    Screenshot from 2020-02-23 21-56-27.png

  13. 処理が終了したのを確認後、Closeをクリックして画面を閉じ、編集後のパーティションの"unallocated"が/dev/loop18p2から独立し、分かれて存在していることを確認します。
    Screenshot from 2020-02-23 21-57-43.png
    Screenshot from 2020-02-23 21-57-48.png

  14. GPartedを終了します。

  15. GPartedで編集したパーティションの"unallocated"部分をfdiskを用いて削除します。

    $ sudo losetup -d /dev/loop18  # /dev/loop18をunmountします。
    $ sudo fdisk -l '/path/to/image/file/hoge.img'  # fdisk -l を用いてGPatedで編集したパーティションを見ます。
    
    Disk /path/to/image/file/hoge.img: 29.2 GiB, 31312576512 bytes, 61157376 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: 0x000816c0

Device                     Boot    Start    End     Sectors  Size Id Type

/path/to/image/file/hoge.img1 8192 4994140 4985949 2.4G e W95 FAT16 (LBA)
/path/to/image/file/hoge.img2 4994141 31594495 26600355 12.7G 5 Extended
/path/to/image/file/hoge.img5 4997120 5062653 65534 32M 83 Linux
/path/to/image/file/hoge.img6 5062656 5586941 524286 256M c W95 FAT32 (LBA)
/path/to/image/file/hoge.img7 5586944 31594495 26007552 12.4G 83 Linux
```

  1. truncateコマンドでhoge.imgのフリースペースを削除し、最終的な配布用imgファイルを作ります。このとき、セクターの最大値(今回は"31594495")に1を足し、それを512倍したもののサイズを指定します。

    $ sudo truncate --size=$[(31594495+1)*512] '/path/to/image/file/hoge.img'
    
  2. 無事にファイルサイズが小さくなった配布用のimageファイルが作成されました! sudo chownでパーミッションを変更し完成です!

    $ ls -lh
    ...
    -rw-r--r-- 1 root     root     25G Feb 23 20:00  hgoe.img
    ...
    $ sudo chown hoge:hoge ./hoge.img
    ...
    -rw-r--r-- 1 hoge     hoge     25G Feb 23 20:00  hgoe.img
    ...
    
  3. おつかれさまでした !!

作成したimgファイルを元にしたクローンの作成

今回作成した img ファイルを元に新たな MicroSD を作成するには、再びddコマンドを使用します。ifとofの指定に気をつけてください!特にofの指定を誤ると他の補助記憶装置の中身が全削除されます!

$ sudo dd bs=1M if='/path/to/image/file/hoge.img' of=/dev/sdx status=progress
# MicroSDのデバイスIDは、`fdisk -l`などで調べられます。

Trouble-Shooting

  1. GPatedで/dev/loop18p7(今回の場合)のパテーションを変更する際、あまりにもギリギリまで攻めすぎると、以下のエラー画面が出ます。この画面が出ましたら、少し余裕を持ってフリースペースを設定してみてください。

  Screenshot from 2020-02-23 21-55-52.png

References

以下のサイトを参考にさせていただきました。大変、ありがとうございました。

  1. Arch linux: GParted
  2. NIJIOTA.NET: バックアップしたイメージファイルを縮小する
  3. Arch linux, ディスクのクローン