2020/05/27

TimeMachineで複数のMacのバックアップをしていて片方のMacが容量を食いすぎてしまった場合の対処法

タイトルの通り.

一つのTimeCapsuleにTimeMachineで複数のiMacとMacbookのバックアップを取っていたら,一方のiMacがどんどん空き容量にバックアップをためていき,たまにしか接続しないもう一方のMacbookは残された容量をほそぼそと使うという状態になっていた.
そしてとうとう,バックアップができない状態になってしまったので,渋々対応策を探す.



まず,

tmutil listbackups 

とかするとバックアップの履歴がリストされる.
そこから例えば,

sudo tmutil delete /Volumes/Time\ Machine\ バックアップ/Backups.backupdb/<マシン名>/2019-*

のような感じで,まとめて削除.

Total deleted: 470.0G

とか出て,空き容量が増えたかと思いきや,Macbook側から見ると空容量増えず.

hdiutil detach /Volumes/Time\ Machine\ バックアップ

した後に,

hdiutil compact /Volumes/<ディスク名>/<マシン名>.sparsebundle

で圧縮.
これで空き容量が開放される.

まぁ,本来ならパーティション分けるのが正しいんでしょうね.


参考にしたサイトはこちら.
基本的にはこのサイトでやっている通り.
https://qiita.com/takc923/items/52c4f7e4d260fc89a907

2020/04/29

Djangoで継承している子クラスのオブジェクトを親クラスのオブジェクトから見つける

タイトルの通り.

子クラスの名前がわかってる場合は,
parent_obj.child
でアクセス可能だけど,継承している子クラスが複数あって,どのクラスのオブジェクトに対応づいているか不明な場合は,工夫がいる.
related_objects から対応付くクラスの一覧を取得して,getattrでテキストで指定してアクセスすればOK.
こういう書き方をしておくと,子クラスを増やしたときに,書き換える必要がないから楽.

コードは以下の通り.

class Parent(models.Model):
    def get_child(self):
        """継承する子クラスのオブジェクトを返す"""
        children = self._meta.related_objects  # 継承している子クラス一覧を見つける
        for c in children:
            try:
                child = getattr(self, c.name)  # テキストで指定したselfのインスタンス変数にアクセス
            except getattr(ImageDatabase, c.name).RelatedObjectDoesNotExist:  # テキストで指定したクラス変数にアクセス
                pass  # 対応するオブジェクトがなければ何もしない
        return child

class Child(ImageDatabase):
    parent = models.OneToOneField(to= Parent, related_name='relation')


でも,もっとちゃんとした方法があるかも.
誰か知ってたら教えてほしい.

2020/03/11

lynxでno_proxy

lynx でプロキシの問題でページが表示できなくて困っていたが,どうやら no_proxy のワイルドカードが使えないということのようだ.

2020/02/06

pipでsslモジュールが使えないと言われた場合の対処法

何がきっかけかわからないが,あるとき突然pipができなくなってしまった.
エラーは以下の通りで,sslモジュールが使えないと言われる.

pip is configured with locations that require TLS/SSL, however the ssl module in Python is not available.

ググると,opensslを入れ直せと出てくるが,

brew update
brew upgrade
brew uninstall --ignore-dependencies openssl
brew install openssl

とかしてみてもだめ.
色々試行錯誤の結果,以下で行けたように見えた.

brew uninstall --ignore-dependencies openssl
brew install https://github.com/tebelorg/Tump/releases/download/v1.0.0/openssl.rb

しかし,今度はsshができなくなる.
エラー内容はこんな感じ.
dyld: Library not loaded: /usr/local/opt/openssl@1.1/lib/libcrypto.1.1.dylib


最終的に以下で行けた.

brew switch openssl 1.0.2t


2019/11/25

sudo しないとアクセスできないファイルをローカルにコピーする方法

普通にscpとかを使ってもできない.
以下のようにsshすればできる.

ssh -t user@host 'echo パスワード |sudo -S cat ファイルパス' > ローカルファイル名

2019/11/06

異なるファイルが置かれた複数のデスクトップを切り替えながら使う方法

Dropboxがシンボリックリンク非対応になった問題を解決する方法 を探していたら,副産物として,デスクトップを簡単に切り替える方法を考えついたので,メモを残す.

タイトルに有る通り,別々のファイルが置かれたデスクトップを複数用意することができる方法であって,MacのMission Controlのように,隣のデスクトップに移動しても同じファイルがありつつ,ウィンドウを広げるスペースを確保する話とは全く異なるので注意.
つまり,例えば,仕事用のファイルを置いたデスクトップとプライベート用ファイルを置いたデスクトップをそれぞれ分けて使うことが可能になったりする.

使うのは,bindfsというツール.
bindfs は FUSEの仕組みを使って,任意のファイルシステムをマウントできるものらしい.
とりあえず以下でインストール.


brew cask install osxfuse
brew install bindfs

使い方は簡単で,

bindfs somedir/ mountdir/

とすると,somedirがmountdirにマウントされる.
これを使い,以下のように,任意のフォルダ(somedir)を~/Desktopにマウントすると,Desktopのファイル群がsomedirの中身に入れ替わる.
切り替えて戻しても,ファイルの配置はそのまま.

bindfs -o volname=Desktop ~/somedir/ ~/Desktop/

戻すときはアンマウント(ディスクを取り出す)すればOK.

Dropboxがシンボリックリンク非対応になった問題を解決する方法


先日,Dropboxから,今後はシンボリックリンクのファイルは同期しないようにする旨のアナウンスが来ていた.
Macでシンボリックリンクを使った 複数PCのDesktopをDropboxを使って同期する方法 が使えなくなってしまい頭を抱えてしまった.

試行錯誤の末,bindfsを使えば解決するばかりか,より良い実装にできそうということがわかったので,メモを残す.


悩んだ過程は以下の通り.

シンボリックリンクでDropboxは同期してくれない.
Googleドライブ,OneDriveも試したが,同じ仕様.
SugerSincはできるっぽいけど無料は90日限定.

ハードリンクならどうか.
ハードリンクは,High Sierra以降はファイルシステムとしてAPFSが強要されるため,ディレクトリのハードリンクは不可.
逐一ファイルごとにハードリンクを張るスクリプトを組むのは面倒臭すぎる...


結局たどり着いたのが,bindfs.
bindfs は FUSEの仕組みを使って,任意のファイルシステムをマウントできるものらしい.

とりあえずインストール.


brew cask install osxfuse
brew install bindfs

使い方は簡単で,

bindfs somedir/ mountdir/

とするだけ.
オプションを付けると色々とポリシーを変えたりできるらしい.
シンボリックリンクで実現していたときと同様に,DesktopをDropbox内にマウントしても,マウントされたファイルは同期対象にはならないので,Dropboxディレクトリ自体をDesktopディレクトリにマウントしてしまおう.
(このような使い方はAppleは想定していないと思うので,自己責任で)

以下のコマンドを打つと,Dropboxディレクトリに入っているものが,Desktopに表示されるようになる.

 bindfs -o volname=Desktop ~/Dropbox\ \(個人用\)/ ~/Desktop/

アンマウント(ディスクを取り出し)すると,元のDesktopに戻ります.
再度マウントするとちゃんと元の配置に戻るようになっている.


当然,再起動するとマウントされていない状態に戻るので,コマンドを打ち直す必要があります.
また,副作用として,ディスクとして扱われるのでDesktop外にファイルをドラッグすると,移動ではなくコピーになってしまいます.
コマンドキーを押しながらドラッグすると,移動になる(ただし,厳密には移動ではなく,コピーしてから削除なので,大きなファイルを移動するときはDropboxから直接動かしたほうが良い).

これでめでたく,複数PCのDesktopを同期することができました.